001package jmri.jmrit.tracker; 002 003import jmri.*; 004 005/** 006 * Tracks train into memory object 007 * 008 * @author Bob Jacobsen Copyright (C) 2006 009 */ 010public class MemoryTracker { 011 012 /** 013 * Create a Tracker object, providing a list of blocks to watch 014 * @param b block to track. 015 * @param namePrefix system name prefix. 016 * @throws IllegalArgumentException when needed 017 */ 018 public MemoryTracker(Block b, String namePrefix) throws IllegalArgumentException { 019 block = b; 020 021 // make sure Memory objects exist & remember it 022 Memory m = jmri.InstanceManager.memoryManagerInstance() 023 .provideMemory(namePrefix + block.getSystemName()); 024 namedMemory = jmri.InstanceManager.getDefault(jmri.NamedBeanHandleManager.class) 025 .getNamedBeanHandle(namePrefix + block.getSystemName(), m); 026 // set listener in the block 027 block.addPropertyChangeListener( e -> handleChange()); 028 029 // first update 030 handleChange(); 031 } 032 033 private void handleChange() { 034 if (log.isDebugEnabled() && (block.getValue() != null)) { 035 log.debug("set value {} in block {}", block.getValue(), block.getSystemName()); 036 } 037 Object o = block.getValue(); 038 if (o != null) { 039 o = o.toString(); 040 } 041 namedMemory.getBean().setValue(o); 042 } 043 044 private final NamedBeanHandle<Memory> namedMemory; 045 private final Block block; 046 047 private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(MemoryTracker.class); 048}