Class ProxyIdTagManager
- java.lang.Object
-
- jmri.beans.PropertyChangeSupport
-
- jmri.beans.VetoableChangeSupport
-
- jmri.managers.AbstractProxyManager<E>
-
- jmri.managers.AbstractProvidingProxyManager<IdTag>
-
- jmri.managers.ProxyIdTagManager
-
- All Implemented Interfaces:
java.beans.PropertyChangeListener,java.util.EventListener,PropertyChangeFirer,PropertyChangeProvider,SilenceablePropertyChangeProvider,VetoableChangeFirer,VetoableChangeProvider,IdTagManager,Manager<IdTag>,Manager.ManagerDataListener<IdTag>,ProvidingManager<IdTag>,ProxyManager<IdTag>
public class ProxyIdTagManager extends AbstractProvidingProxyManager<IdTag> implements IdTagManager
Implementation of a IdTagManager that can serve as a proxy for multiple system-specific implementations.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface jmri.Manager
Manager.ManagerDataEvent<E extends NamedBean>, Manager.ManagerDataListener<E extends NamedBean>, Manager.NameValidity
-
-
Field Summary
-
Fields inherited from class jmri.managers.AbstractProxyManager
defaultManager, listeners, 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, PROPERTY_BEANS, PROPERTY_CAN_DELETE, PROPERTY_DISPLAY_LIST_NAME, PROPERTY_DO_DELETE, PROPERTY_DO_NOT_DELETE, PROPERTY_LENGTH, REPORTERS, ROUTES, SECTIONS, SENSORGROUPS, SENSORS, SIGNALGROUPS, SIGNALHEADS, SIGNALMASTLOGICS, SIGNALMASTS, STRINGIOS, TIMEBASE, TRANSITS, TURNOUTS, WARRANTS
-
-
Constructor Summary
Constructors Constructor Description ProxyIdTagManager()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description java.lang.StringgetBeanTypeHandled(boolean plural)Get the user-readable name of the type of NamedBean handled by this manager.IdTaggetByTagID(java.lang.String tagID)Locate an instance based on a tag ID.IdTagManagergetDefaultManager()Get the default manager or the internal manager if no default manager has been set.IdTaggetIdTag(java.lang.String name)Locate via user name, then 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.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.intgetXMLOrder()Determine the order that types should be written when storing panel files.voidinit()Perform initialization.booleanisFastClockUsed()Determines if fast clock times should be recorded for when a given IdTag was last seen.booleanisInitialised()Determines if the manager has been initialized.booleanisStateStored()Determines if the state of known IdTags should be stored.protected IdTagmakeBean(Manager<IdTag> manager, java.lang.String systemName, java.lang.String userName)Defer creation of the proper type to the subclass.protected AbstractManager<IdTag>makeInternalManager()Create specific internal manager as needed for concrete type.IdTagnewIdTag(java.lang.String systemName, java.lang.String userName)Get an instance with the specified system and user names.IdTagprovide(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.IdTagprovideIdTag(java.lang.String name)Locate via user name, then system name if needed.voidsetFastClockUsed(boolean fastClock)Define if the manager should use the fast clock when setting the times when a given IdTag was last seen.voidsetStateStored(boolean state)Define if the manager should persist details of when and where all known IdTags were seen.-
Methods inherited from class jmri.managers.AbstractProvidingProxyManager
newNamedBean, provideNamedBean
-
Methods inherited from class jmri.managers.AbstractProxyManager
addDataListener, addManager, addPropertyChangeListener, addPropertyChangeListener, addVetoableChangeListener, addVetoableChangeListener, contentsChanged, createSystemManager, createSystemName, createSystemName, deleteBean, deregister, dispose, getBySystemName, getByUserName, getDisplayOrderManagerList, getEntryToolTip, getInternalManager, getKnownBeanProperties, getManager, getManagerList, getManagerOrDefault, getMemo, getNamedBean, getNextValidSystemName, getObjectCount, getSystemPrefix, initInternal, intervalAdded, intervalRemoved, makeSystemName, propertyChange, recomputeNamedBeanSet, register, removeDataListener, removePropertyChangeListener, removePropertyChangeListener, removeVetoableChangeListener, removeVetoableChangeListener, setDataListenerMute, setPropertyChangesSilenced, typeLetter, validateSystemNameFormat, validSystemNameFormat
-
Methods inherited from class jmri.beans.VetoableChangeSupport
fireVetoableChange, fireVetoableChange, fireVetoableChange, fireVetoableChange, getVetoableChangeListeners, getVetoableChangeListeners
-
Methods inherited from class jmri.beans.PropertyChangeSupport
fireIndexedPropertyChange, fireIndexedPropertyChange, fireIndexedPropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getPropertyChangeListeners, getPropertyChangeListeners
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface jmri.IdTagManager
getBySystemName, getByUserName
-
Methods inherited from interface jmri.Manager
addDataListener, deleteBean, deregister, dispose, getBeanTypeHandled, getEntryToolTip, getKnownBeanProperties, getMemo, getNamedBean, getObjectCount, getSubSystemNamePrefix, getSystemNamePrefix, getSystemPrefix, isValidSystemNameFormat, makeSystemName, makeSystemName, makeSystemName, register, removeDataListener, setDataListenerMute, typeLetter, 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
-
-
-
-
Constructor Detail
-
ProxyIdTagManager
public ProxyIdTagManager()
-
-
Method Detail
-
getXMLOrder
public int getXMLOrder()
Description copied from interface:ManagerDetermine 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:
getXMLOrderin interfaceManager<IdTag>- Returns:
- write order for this Manager; larger is later.
-
init
public void init()
Description copied from interface:IdTagManagerPerform initialization.- Specified by:
initin interfaceIdTagManager
-
isInitialised
public boolean isInitialised()
Determines if the manager has been initialized.- Specified by:
isInitialisedin interfaceIdTagManager- Returns:
- true if All IdTagManagers have initialised.
-
getDefaultManager
@Nonnull public IdTagManager getDefaultManager()
Get the default manager or the internal manager if no default manager has been set. This returns the specific IdTagManager type.- Specified by:
getDefaultManagerin interfaceProxyManager<IdTag>- Overrides:
getDefaultManagerin classAbstractProxyManager<IdTag>- Returns:
- the default manager or the internal manager
-
makeInternalManager
protected AbstractManager<IdTag> makeInternalManager()
Description copied from class:AbstractProxyManagerCreate specific internal manager as needed for concrete type.- Specified by:
makeInternalManagerin classAbstractProxyManager<IdTag>- Returns:
- an internal manager
-
getIdTag
@CheckForNull public IdTag getIdTag(@Nonnull java.lang.String name)
Locate via user name, then system name if needed.- Specified by:
getIdTagin interfaceIdTagManager- Parameters:
name- tag name being requested- Returns:
- Null if nothing by that name exists
-
getNamedBeanSet
@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:
getNamedBeanSetin interfaceManager<IdTag>- Overrides:
getNamedBeanSetin classAbstractProxyManager<IdTag>- Returns:
- Unmodifiable access to a SortedSet of NamedBeans
-
makeBean
@Nonnull protected IdTag makeBean(Manager<IdTag> manager, java.lang.String systemName, java.lang.String userName) throws java.lang.IllegalArgumentException
Description copied from class:AbstractProvidingProxyManagerDefer creation of the proper type to the subclass.- Specified by:
makeBeanin classAbstractProvidingProxyManager<IdTag>- Parameters:
manager- the manager to invokesystemName- the system nameuserName- the user name- Returns:
- a bean
- Throws:
java.lang.IllegalArgumentException- if unable to make.
-
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:
providein 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.
-
provideIdTag
@Nonnull public IdTag provideIdTag(@Nonnull java.lang.String name) throws java.lang.IllegalArgumentException
Locate via user name, then 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:
provideIdTagin interfaceIdTagManager- Parameters:
name- Tag ID, user name, system name, or address which can be promoted to system name- Returns:
- Never null under normal circumstances
- 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.
-
newIdTag
@Nonnull public IdTag newIdTag(@Nonnull java.lang.String systemName, java.lang.String userName) throws java.lang.IllegalArgumentException
Get 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 light and therefore only one with a specific system or user name.This will always return a valid object reference for a valid request; 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 a null reference is given for the system name, a system name will _somehow_ be inferred from the user name. How this is done is system specific. Note: a future extension of this interface will add an exception to signal that this was not possible.
- If both names are provided, the system name defines the hardware access of the desired turnout, and the user address is associated with it.
- Specified by:
newIdTagin 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.
-
getByTagID
@CheckForNull public IdTag getByTagID(@Nonnull java.lang.String tagID)
Description copied from interface:IdTagManagerLocate an instance based on a tag ID. Returns null if no instance already exists.- Specified by:
getByTagIDin interfaceIdTagManager- Parameters:
tagID- tag ID being requested- Returns:
- requested IdTag object or null if none exists
-
getBeanTypeHandled
@Nonnull public java.lang.String getBeanTypeHandled(boolean plural)
Description copied from interface:ManagerGet 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:
getBeanTypeHandledin 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:
getNamedBeanClassin interfaceManager<IdTag>- Returns:
- the class supported by this Manager.
-
setStateStored
public void setStateStored(boolean state)
Description copied from interface:IdTagManagerDefine if the manager should persist details of when and where all known IdTags were seen.- Specified by:
setStateStoredin interfaceIdTagManager- Parameters:
state- True to store; False to omit
-
isStateStored
public boolean isStateStored()
Description copied from interface:IdTagManagerDetermines if the state of known IdTags should be stored.- Specified by:
isStateStoredin interfaceIdTagManager- Returns:
- True to store state; False to discard state
-
setFastClockUsed
public void setFastClockUsed(boolean fastClock)
Description copied from interface:IdTagManagerDefine if the manager should use the fast clock when setting the times when a given IdTag was last seen.- Specified by:
setFastClockUsedin interfaceIdTagManager- Parameters:
fastClock- True to use the fast clock; False to use the system clock
-
isFastClockUsed
public boolean isFastClockUsed()
Description copied from interface:IdTagManagerDetermines if fast clock times should be recorded for when a given IdTag was last seen.- Specified by:
isFastClockUsedin 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)
Description copied from interface:IdTagManagerGet a list of all IdTags seen by a specified Reporter within a specific time threshold from the most recently seen.- Specified by:
getTagsForReporterin interfaceIdTagManager- Parameters:
reporter- Reporter to return list forthreshold- Time threshold (in ms)- Returns:
- List of matching IdTags
-
-