001package jmri.jmrix.loconet.logixng; 002 003import jmri.jmrit.logixng.actions.*; 004 005import java.util.Locale; 006import java.util.Map; 007 008import jmri.InstanceManager; 009import jmri.JmriException; 010import jmri.jmrit.logixng.*; 011import jmri.jmrix.loconet.*; 012 013/** 014 * Sets all engine slots to status common 015 * 016 * @author Daniel Bergqvist Copyright 2020 017 */ 018public class ActionClearSlots extends AbstractDigitalAction { 019 020 private static final int NUM_LOCO_SLOTS_TO_CLEAR = 119; 021 022 private LocoNetSystemConnectionMemo _memo; 023 024 public ActionClearSlots(String sys, String user, LocoNetSystemConnectionMemo memo) { 025 super(sys, user); 026 _memo = memo; 027 } 028 029 @Override 030 public Base getDeepCopy(Map<String, String> systemNames, Map<String, String> userNames) throws JmriException { 031 DigitalActionManager manager = InstanceManager.getDefault(DigitalActionManager.class); 032 String sysName = systemNames.get(getSystemName()); 033 String userName = userNames.get(getSystemName()); 034 if (sysName == null) sysName = manager.getAutoSystemName(); 035 ActionClearSlots copy = new ActionClearSlots(sysName, userName, _memo); 036 return manager.registerAction(copy).deepCopyChildren(this, systemNames, userNames); 037 } 038 039 /** {@inheritDoc} */ 040 @Override 041 public Category getCategory() { 042 return CategoryLocoNet.LOCONET; 043 } 044 045 public void setMemo(LocoNetSystemConnectionMemo memo) { 046 assertListenersAreNotRegistered(log, "setMemo"); 047 _memo = memo; 048 } 049 050 public LocoNetSystemConnectionMemo getMemo() { 051 return _memo; 052 } 053 054 /** {@inheritDoc} */ 055 @Override 056 public void execute() { 057 for (int i=1; i <= NUM_LOCO_SLOTS_TO_CLEAR; i++) { 058 LocoNetSlot slot = _memo.getSlotManager().slot(i); 059 if ((slot.slotStatus() & LnConstants.LOCOSTAT_MASK) != LnConstants.LOCO_FREE) { 060// _memo.getLnTrafficController().sendLocoNetMessage(slot.writeStatus(LnConstants.LOCO_FREE)); 061 _memo.getLnTrafficController().sendLocoNetMessage(slot.releaseSlot()); 062 } 063 } 064 } 065 066 @Override 067 public FemaleSocket getChild(int index) throws IllegalArgumentException, UnsupportedOperationException { 068 throw new UnsupportedOperationException("Not supported."); 069 } 070 071 @Override 072 public int getChildCount() { 073 return 0; 074 } 075 076 @Override 077 public String getShortDescription(Locale locale) { 078 return Bundle.getMessage(locale, "ActionClearSlots_Short"); 079 } 080 081 @Override 082 public String getLongDescription(Locale locale) { 083 return Bundle.getMessage(locale, "ActionClearSlots_Long", 084 _memo != null ? _memo.getUserName() : Bundle.getMessage("MemoNotSet")); 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(ActionClearSlots.class); 114 115}