001package jmri.jmrit.logixng.actions; 002 003import java.beans.PropertyChangeEvent; 004import java.beans.PropertyChangeListener; 005import java.util.*; 006 007import javax.annotation.CheckForNull; 008import javax.annotation.Nonnull; 009 010import jmri.*; 011import jmri.jmrit.logixng.*; 012import jmri.jmrit.logixng.util.LogixNG_SelectNamedBean; 013import jmri.jmrit.logixng.util.parser.ParserException; 014 015/** 016 * Sets a Memory. 017 * 018 * @author Daniel Bergqvist Copyright 2018 019 */ 020public class StringActionMemory extends AbstractStringAction 021 implements PropertyChangeListener { 022 023 private final LogixNG_SelectNamedBean<Memory> _selectNamedBean = 024 new LogixNG_SelectNamedBean<>( 025 this, Memory.class, InstanceManager.getDefault(MemoryManager.class), this); 026 027 public StringActionMemory(String sys, String user) { 028 super(sys, user); 029 } 030 031 @Override 032 public Base getDeepCopy(Map<String, String> systemNames, Map<String, String> userNames) throws ParserException { 033 StringActionManager manager = InstanceManager.getDefault(StringActionManager.class); 034 String sysName = systemNames.get(getSystemName()); 035 String userName = userNames.get(getSystemName()); 036 if (sysName == null) sysName = manager.getAutoSystemName(); 037 StringActionMemory copy = new StringActionMemory(sysName, userName); 038 copy.setComment(getComment()); 039 _selectNamedBean.copy(copy._selectNamedBean); 040 return manager.registerAction(copy); 041 } 042 043 public LogixNG_SelectNamedBean<Memory> getSelectNamedBean() { 044 return _selectNamedBean; 045 } 046 047 /** {@inheritDoc} */ 048 @Override 049 public void setValue(String value) throws JmriException { 050 Memory memory = _selectNamedBean.evaluateNamedBean(getConditionalNG()); 051 if (memory != null) { 052 memory.setValue(value); 053 } 054 } 055 056 /** {@inheritDoc} */ 057 @Override 058 public FemaleSocket getChild(int index) throws IllegalArgumentException, UnsupportedOperationException { 059 throw new UnsupportedOperationException("Not supported."); 060 } 061 062 /** {@inheritDoc} */ 063 @Override 064 public int getChildCount() { 065 return 0; 066 } 067 068 /** {@inheritDoc} */ 069 @Override 070 public Category getCategory() { 071 return Category.ITEM; 072 } 073 074 /** {@inheritDoc} */ 075 @Override 076 public String getShortDescription(Locale locale) { 077 return Bundle.getMessage(locale, "StringActionMemory_Short"); 078 } 079 080 /** {@inheritDoc} */ 081 @Override 082 public String getLongDescription(Locale locale) { 083 return Bundle.getMessage(locale, "StringActionMemory_Long", _selectNamedBean.getDescription(locale)); 084 } 085 086 /** {@inheritDoc} */ 087 @Override 088 public void setup() { 089 // Do nothing 090 } 091 092 /** {@inheritDoc} */ 093 @Override 094 public void registerListenersForThisClass() { 095 _selectNamedBean.registerListeners(); 096 } 097 098 /** {@inheritDoc} */ 099 @Override 100 public void unregisterListenersForThisClass() { 101 _selectNamedBean.unregisterListeners(); 102 } 103 104 /** {@inheritDoc} */ 105 @Override 106 public void disposeMe() { 107 } 108 109 /** {@inheritDoc} */ 110 @Override 111 public void getUsageDetail(int level, NamedBean bean, List<NamedBeanUsageReport> report, NamedBean cdl) { 112 _selectNamedBean.getUsageDetail(level, bean, report, cdl, this, LogixNG_SelectNamedBean.Type.Action); 113 } 114 115 /** {@inheritDoc} */ 116 @Override 117 public void propertyChange(PropertyChangeEvent evt) { 118 getConditionalNG().execute(); 119 } 120 121// private final static org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(StringActionMemory.class); 122 123}