Class DefaultIdTagManager
- java.lang.Object
-
- jmri.beans.PropertyChangeSupport
-
- jmri.beans.VetoableChangeSupport
-
- jmri.managers.AbstractManager<IdTag>
-
- jmri.managers.DefaultIdTagManager
-
- All Implemented Interfaces:
java.beans.PropertyChangeListener
,java.beans.VetoableChangeListener
,java.util.EventListener
,PropertyChangeFirer
,PropertyChangeProvider
,SilenceablePropertyChangeProvider
,VetoableChangeFirer
,VetoableChangeProvider
,Disposable
,IdTagManager
,Manager<IdTag>
,ProvidingManager<IdTag>
- Direct Known Subclasses:
DefaultRailComManager
,TranspondingTagManager
public class DefaultIdTagManager extends AbstractManager<IdTag> implements IdTagManager, Disposable
Concrete implementation for the InternalIdTagManager
interface.- Since:
- 2.11.4
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
DefaultIdTagManager.Initializer
-
Nested classes/interfaces inherited from interface jmri.Manager
Manager.ManagerDataEvent<E extends NamedBean>, Manager.ManagerDataListener<E extends NamedBean>, Manager.NameValidity
-
-
Field Summary
Fields Modifier and Type Field Description protected boolean
dirty
static java.lang.String
PROPERTY_INITIALISED
-
Fields inherited from class jmri.managers.AbstractManager
_beans, _tsys, _tuser, lastAutoNamedBeanRef, memo, paddedNumber, silenceableProperties, silencedProperties
-
Fields inherited from class jmri.beans.VetoableChangeSupport
vetoableChangeSupport
-
Fields inherited from class jmri.beans.PropertyChangeSupport
propertyChangeSupport
-
Fields inherited from interface jmri.Manager
ANALOGIOS, AUDIO, BLOCKBOSS, BLOCKS, CONDITIONALS, CTCDATA, ENTRYEXIT, IDTAGS, LAYOUTBLOCKS, LIGHTS, LOGIXNG_ANALOG_ACTIONS, LOGIXNG_ANALOG_EXPRESSIONS, LOGIXNG_CONDITIONALNGS, LOGIXNG_DIGITAL_ACTIONS, LOGIXNG_DIGITAL_BOOLEAN_ACTIONS, LOGIXNG_DIGITAL_EXPRESSIONS, LOGIXNG_GLOBAL_VARIABLES, LOGIXNG_MODULES, LOGIXNG_STRING_ACTIONS, LOGIXNG_STRING_EXPRESSIONS, LOGIXNG_TABLES, LOGIXNGS, LOGIXS, MEMORIES, METERFRAMES, METERS, OBLOCKS, PANELFILES, REPORTERS, ROUTES, SECTIONS, SENSORGROUPS, SENSORS, SIGNALGROUPS, SIGNALHEADS, SIGNALMASTLOGICS, SIGNALMASTS, STRINGIOS, TIMEBASE, TRANSITS, TURNOUTS, WARRANTS
-
-
Constructor Summary
Constructors Constructor Description DefaultIdTagManager(SystemConnectionMemo memo)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected IdTag
createNewIdTag(java.lang.String systemName, java.lang.String userName)
void
deregister(IdTag s)
Forget a NamedBean Object created outside the manager.void
dispose()
Free resources when no longer used.java.lang.String
getBeanTypeHandled(boolean plural)
Get the user-readable name of the type of NamedBean handled by this manager.IdTag
getBySystemName(java.lang.String name)
Locate an existing instance based on a system name.IdTag
getByTagID(java.lang.String tagID)
Locate an instance based on a tag ID.IdTag
getByUserName(java.lang.String key)
Locate an existing instance based on a user name.IdTag
getIdTag(java.lang.String name)
Locate via tag ID, then by user name, and finally system name if needed.java.lang.Class<IdTag>
getNamedBeanClass()
Get the class of NamedBean supported by this Manager.java.util.SortedSet<IdTag>
getNamedBeanSet()
Provide an unmodifiable SortedSet of NamedBeans in system-name order.int
getObjectCount()
Get the count of managed objects.java.util.List<IdTag>
getTagsForReporter(Reporter reporter, long threshold)
Get a list of all IdTags seen by a specified Reporter within a specific time threshold from the most recently seen.int
getXMLOrder()
Determine the order that types should be written when storing panel files.void
init()
Perform initialization.protected void
initShutdownTask()
boolean
isFastClockUsed()
Determines if fast clock times should be recorded for when a given IdTag was last seen.boolean
isInitialised()
Determines if the manager has been initialized.boolean
isStateStored()
Determines if the state of known IdTags should be stored.IdTag
newIdTag(java.lang.String systemName, java.lang.String userName)
Provide ID Tag by UserName then SystemName, creates new IdTag if not found.void
propertyChange(java.beans.PropertyChangeEvent e)
The PropertyChangeListener interface in this class is intended to keep track of user name changes to individual NamedBeans.IdTag
provide(java.lang.String name)
Get an existing instance via user name, then system name; if no matching instance is found, create a new NameBean from the system name.IdTag
provideIdTag(java.lang.String name)
Locate via tag ID, then user name, and finally system name if needed.void
readIdTagDetails()
void
register(IdTag s)
Remember a NamedBean Object created outside the manager.protected void
registerSelf()
By default, register this manager to store as configuration information.void
setFastClockUsed(boolean fastClock)
Define if the manager should use the fast clock when setting the times when a given IdTag was last seen.void
setStateStored(boolean state)
Define if the manager should persist details of when and where all known IdTags were seen.char
typeLetter()
void
writeIdTagDetails()
-
Methods inherited from class jmri.managers.AbstractManager
addDataListener, checkNumeric, createSystemName, deleteBean, fireDataListenersAdded, fireDataListenersRemoved, fireVetoableChange, getAutoSystemName, getBySystemName, getKnownBeanProperties, getMemo, getNamedBean, getOuterBean, getSystemPrefix, handleUserNameUniqueness, makeSystemName, registerUserName, removeDataListener, setDataListenerMute, setPropertyChangesSilenced, setRegisterSelf, updateAutoNumber, validSystemNameFormat, vetoableChange
-
Methods inherited from class jmri.beans.VetoableChangeSupport
addVetoableChangeListener, addVetoableChangeListener, fireVetoableChange, fireVetoableChange, fireVetoableChange, getVetoableChangeListeners, getVetoableChangeListeners, removeVetoableChangeListener, removeVetoableChangeListener
-
Methods inherited from class jmri.beans.PropertyChangeSupport
addPropertyChangeListener, addPropertyChangeListener, fireIndexedPropertyChange, fireIndexedPropertyChange, fireIndexedPropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getPropertyChangeListeners, getPropertyChangeListeners, removePropertyChangeListener, removePropertyChangeListener
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface jmri.Manager
addDataListener, deleteBean, getBeanTypeHandled, getEntryToolTip, getKnownBeanProperties, getMemo, getNamedBean, getSubSystemNamePrefix, getSystemNamePrefix, getSystemPrefix, isValidSystemNameFormat, makeSystemName, makeSystemName, makeSystemName, removeDataListener, setDataListenerMute, validateBadCharsInSystemNameFormat, validateIntegerSystemNameFormat, validateNmraAccessorySystemNameFormat, validateSystemNameFormat, validateSystemNameFormat, validateSystemNameFormatOnlyNumeric, validateSystemNamePrefix, validateTrimmedMin1NumberSystemNameFormat, validateTrimmedSystemNameFormat, validateUppercaseTrimmedSystemNameFormat, validSystemNameFormat
-
Methods inherited from interface jmri.beans.PropertyChangeProvider
addPropertyChangeListener, addPropertyChangeListener, getPropertyChangeListeners, getPropertyChangeListeners, removePropertyChangeListener, removePropertyChangeListener
-
Methods inherited from interface jmri.beans.SilenceablePropertyChangeProvider
setPropertyChangesSilenced
-
Methods inherited from interface jmri.beans.VetoableChangeProvider
addVetoableChangeListener, addVetoableChangeListener, getVetoableChangeListeners, getVetoableChangeListeners, removeVetoableChangeListener, removeVetoableChangeListener
-
-
-
-
Field Detail
-
dirty
protected boolean dirty
-
PROPERTY_INITIALISED
public static final java.lang.String PROPERTY_INITIALISED
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
DefaultIdTagManager
public DefaultIdTagManager(SystemConnectionMemo memo)
-
-
Method Detail
-
getXMLOrder
public int getXMLOrder()
Determine the order that types should be written when storing panel files. Uses one of the constants defined in this class.Yes, that's an overly-centralized methodology, but it works for now.
- Specified by:
getXMLOrder
in interfaceManager<IdTag>
- Returns:
- write order for this Manager; larger is later.
-
isInitialised
public boolean isInitialised()
Determines if the manager has been initialized.- Specified by:
isInitialised
in interfaceIdTagManager
- Returns:
- state of initialization
-
init
public void init()
Perform initialization.- Specified by:
init
in interfaceIdTagManager
-
initShutdownTask
protected void initShutdownTask()
-
registerSelf
protected void registerSelf()
By default, register this manager to store as configuration information. Override to change that. Don't want to store this information- Overrides:
registerSelf
in classAbstractManager<IdTag>
-
typeLetter
public char typeLetter()
- Specified by:
typeLetter
in interfaceManager<IdTag>
- Returns:
- The type letter for a specific implementation
-
provide
@Nonnull public IdTag provide(@Nonnull java.lang.String name) throws java.lang.IllegalArgumentException
Get an existing instance via user name, then system name; if no matching instance is found, create a new NameBean from the system name.If the name is a valid system name, it will be used for the new NamedBean. Otherwise, the
Manager.makeSystemName(java.lang.String)
method will attempt to turn it into a valid system name which the manager will attempt to use. If that fails, an exception is thrown.This is similar to the specific methods found in certain type-specific managers:
TurnoutManager.provideTurnout(java.lang.String)
,SensorManager.provideSensor(java.lang.String)
, et al. Those might be more mnemonic; this one is more generic. Neither is preferred nor deprecated; use your choice.- Specified by:
provide
in interfaceProvidingManager<IdTag>
- Parameters:
name
- User name, system name, or address which can be promoted to system name- Returns:
- Never null
- Throws:
java.lang.IllegalArgumentException
- if NamedBean doesn't already exist and the manager cannot create it due to an illegal name or name that can't be parsed.
-
getNamedBeanSet
@CheckReturnValue @Nonnull public java.util.SortedSet<IdTag> getNamedBeanSet()
Provide an unmodifiable SortedSet of NamedBeans in system-name order.Note: This is the fastest of the accessors, and is the only long-term form.
Note: This is a live set; the contents are kept up to date
- Specified by:
getNamedBeanSet
in interfaceManager<IdTag>
- Overrides:
getNamedBeanSet
in classAbstractManager<IdTag>
- Returns:
- Unmodifiable access to a SortedSet of NamedBeans
-
getObjectCount
@CheckReturnValue public int getObjectCount()
Get the count of managed objects.- Specified by:
getObjectCount
in interfaceManager<IdTag>
- Overrides:
getObjectCount
in classAbstractManager<IdTag>
- Returns:
- the number of managed objects
-
provideIdTag
@Nonnull public IdTag provideIdTag(@Nonnull java.lang.String name) throws java.lang.IllegalArgumentException
Locate via tag ID, then user name, and finally system name if needed. If that fails, create a new IdTag. If the name is a valid system name, it will be used for the new IdTag. Otherwise, the makeSystemName method will attempt to turn it into a valid system name.- Specified by:
provideIdTag
in interfaceIdTagManager
- Parameters:
name
- Tag ID, user name, system name, or address which can be promoted to system name- Returns:
- A tag ID
- Throws:
java.lang.IllegalArgumentException
- if IdTag doesn't already exist and the manager cannot create the IdTag due to an illegal name or name that can't be parsed.
-
getIdTag
@CheckForNull public IdTag getIdTag(@Nonnull java.lang.String name)
Locate via tag ID, then by user name, and finally system name if needed. If that fails, return null- Specified by:
getIdTag
in interfaceIdTagManager
- Parameters:
name
- tag name being requested- Returns:
- null if no match found
-
getBySystemName
@CheckForNull public IdTag getBySystemName(@Nonnull java.lang.String name)
Locate an existing instance based on a system name.- Specified by:
getBySystemName
in interfaceIdTagManager
- Specified by:
getBySystemName
in interfaceManager<IdTag>
- Overrides:
getBySystemName
in classAbstractManager<IdTag>
- Parameters:
name
- System Name of the required NamedBean- Returns:
- requested NamedBean object or null if none exists
-
getByUserName
@CheckForNull public IdTag getByUserName(@Nonnull java.lang.String key)
Locate an existing instance based on a user name.- Specified by:
getByUserName
in interfaceIdTagManager
- Specified by:
getByUserName
in interfaceManager<IdTag>
- Overrides:
getByUserName
in classAbstractManager<IdTag>
- Parameters:
key
- System Name of the required NamedBean- Returns:
- requested NamedBean object or null if none exists
-
getByTagID
@CheckForNull public IdTag getByTagID(@Nonnull java.lang.String tagID)
Locate an instance based on a tag ID. Returns null if no instance already exists.- Specified by:
getByTagID
in interfaceIdTagManager
- Parameters:
tagID
- tag ID being requested- Returns:
- requested IdTag object or null if none exists
-
createNewIdTag
@Nonnull protected IdTag createNewIdTag(java.lang.String systemName, java.lang.String userName) throws java.lang.IllegalArgumentException
- Throws:
java.lang.IllegalArgumentException
-
newIdTag
@Nonnull public IdTag newIdTag(@Nonnull java.lang.String systemName, @CheckForNull java.lang.String userName) throws java.lang.IllegalArgumentException
Provide ID Tag by UserName then SystemName, creates new IdTag if not found. Return an instance with the specified system and user names. Note that two calls with the same arguments will get the same instance; there is only one IdTag object representing a given physical IdTag and therefore only one with a specific system or user name.This will always return a valid object reference; a new object will be created if necessary. In that case:
- If a null reference is given for user name, no user name will be associated with the IdTag object created; a valid system name must be provided
- If both are provided, the system name defines the hardware access of the desired IdTag, and the user address is associated with it. The system name must be valid.
- Specified by:
newIdTag
in interfaceIdTagManager
- Parameters:
systemName
- the system nameuserName
- the user name- Returns:
- requested IdTag object (never null)
- Throws:
java.lang.IllegalArgumentException
- if cannot create the IdTag due to e.g. an illegal name or name that can't be parsed.
-
register
public void register(@Nonnull IdTag s)
Remember a NamedBean Object created outside the manager.The non-system-specific SignalHeadManagers use this method extensively.
-
deregister
public void deregister(@Nonnull IdTag s)
Forget a NamedBean Object created outside the manager.The non-system-specific RouteManager uses this method.
- Specified by:
deregister
in interfaceManager<IdTag>
- Overrides:
deregister
in classAbstractManager<IdTag>
- Parameters:
s
- the bean
-
propertyChange
public void propertyChange(java.beans.PropertyChangeEvent e)
The PropertyChangeListener interface in this class is intended to keep track of user name changes to individual NamedBeans. It is not completely implemented yet. In particular, listeners are not added to newly registered objects.- Specified by:
propertyChange
in interfacejava.beans.PropertyChangeListener
- Overrides:
propertyChange
in classAbstractManager<IdTag>
- Parameters:
e
- the event
-
writeIdTagDetails
public void writeIdTagDetails() throws java.io.IOException
- Throws:
java.io.IOException
-
readIdTagDetails
public void readIdTagDetails()
-
setStateStored
public void setStateStored(boolean state)
Define if the manager should persist details of when and where all known IdTags were seen.- Specified by:
setStateStored
in interfaceIdTagManager
- Parameters:
state
- True to store; False to omit
-
isStateStored
public boolean isStateStored()
Determines if the state of known IdTags should be stored.- Specified by:
isStateStored
in interfaceIdTagManager
- Returns:
- True to store state; False to discard state
-
setFastClockUsed
public void setFastClockUsed(boolean fastClock)
Define if the manager should use the fast clock when setting the times when a given IdTag was last seen.- Specified by:
setFastClockUsed
in interfaceIdTagManager
- Parameters:
fastClock
- True to use the fast clock; False to use the system clock
-
isFastClockUsed
public boolean isFastClockUsed()
Determines if fast clock times should be recorded for when a given IdTag was last seen.- Specified by:
isFastClockUsed
in interfaceIdTagManager
- Returns:
- True to use the fast clock; False to use the system clock
-
getTagsForReporter
@Nonnull public java.util.List<IdTag> getTagsForReporter(@Nonnull Reporter reporter, long threshold)
Get a list of all IdTags seen by a specified Reporter within a specific time threshold from the most recently seen.- Specified by:
getTagsForReporter
in interfaceIdTagManager
- Parameters:
reporter
- Reporter to return list forthreshold
- Time threshold (in ms)- Returns:
- List of matching IdTags
-
dispose
public void dispose()
Free resources when no longer used. Specifically, remove all references to and from this object, so it can be garbage-collected.- Specified by:
dispose
in interfaceDisposable
- Specified by:
dispose
in interfaceManager<IdTag>
- Overrides:
dispose
in classAbstractManager<IdTag>
-
getBeanTypeHandled
@Nonnull public java.lang.String getBeanTypeHandled(boolean plural)
Get the user-readable name of the type of NamedBean handled by this manager.For instance, in the code where we are dealing with just a bean and a message that needs to be passed to the user or in a log.
- Specified by:
getBeanTypeHandled
in interfaceManager<IdTag>
- Parameters:
plural
- true to return plural form of the type; false to return singular form- Returns:
- a string of the bean type that the manager handles, eg Turnout, Sensor etc
-
getNamedBeanClass
public java.lang.Class<IdTag> getNamedBeanClass()
Get the class of NamedBean supported by this Manager. This should be the generic class used in the Manager's class declaration.- Specified by:
getNamedBeanClass
in interfaceManager<IdTag>
- Returns:
- the class supported by this Manager.
-
-