Class AbstractSensorManager
- java.lang.Object
-
- jmri.beans.PropertyChangeSupport
-
- jmri.beans.VetoableChangeSupport
-
- jmri.managers.AbstractManager<Sensor>
-
- jmri.managers.AbstractSensorManager
-
- All Implemented Interfaces:
java.beans.PropertyChangeListener
,java.beans.VetoableChangeListener
,java.util.EventListener
,PropertyChangeFirer
,PropertyChangeProvider
,SilenceablePropertyChangeProvider
,VetoableChangeFirer
,VetoableChangeProvider
,Manager<Sensor>
,NameIncrementingManager
,ProvidingManager<Sensor>
,SensorManager
- Direct Known Subclasses:
AcelaSensorManager
,BiDiBSensorManager
,CbusSensorManager
,Dcc4PcSensorManager
,DCCppSensorManager
,EcosSensorManager
,InternalSensorManager
,IpocsSensorManager
,JMRIClientSensorManager
,LnSensorManager
,MarklinSensorManager
,MqttSensorManager
,NceSensorManager
,OlcbSensorManager
,RaspberryPiSensorManager
,RfidSensorManager
,RpsSensorManager
,SerialSensorManager
,SerialSensorManager
,SerialSensorManager
,SerialSensorManager
,SerialSensorManager
,SerialSensorManager
,SRCPSensorManager
,TamsSensorManager
,XBeeSensorManager
,XNetSensorManager
,Z21SensorManager
public abstract class AbstractSensorManager extends AbstractManager<Sensor> implements SensorManager
Abstract base implementation of the SensorManager interface.
-
-
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 Modifier and Type Field Description (package private) static java.util.regex.Matcher
numberMatcher
protected long
sensorDebounceGoingActive
protected long
sensorDebounceGoingInActive
-
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 AbstractSensorManager(SystemConnectionMemo memo)
Create a new SensorManager instance.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected abstract Sensor
createNewSensor(java.lang.String systemName, java.lang.String userName)
Internal method to invoke the factory and create a new Sensor.java.lang.String
createSystemName(java.lang.String curAddress, java.lang.String prefix)
Default Sensor ensures a numeric only system name.java.lang.String
getBeanTypeHandled(boolean plural)
Get the user-readable name of the type of NamedBean handled by this manager.Sensor
getBySystemName(java.lang.String key)
Locate an existing instance based on a system name.long
getDefaultSensorDebounceGoingActive()
long
getDefaultSensorDebounceGoingInActive()
java.lang.String
getEntryToolTip()
Provide a manager-specific tooltip for the Add new item beantable pane.java.lang.Class<Sensor>
getNamedBeanClass()
Get the class of NamedBean supported by this Manager.Sensor
getSensor(java.lang.String name)
Get an existing Sensor or return null if it doesn't exist.int
getXMLOrder()
Determine the order that types should be written when storing panel files.(package private) boolean
isNumber(java.lang.String s)
boolean
isPullResistanceConfigurable()
Do the sensor objects provided by this manager support configuring an internal pullup or pull down resistor?Sensor
newSensor(java.lang.String systemName, java.lang.String userName)
Create a New Sensor.Sensor
provideSensor(java.lang.String name)
Get the Sensor with the user name, then system name if needed; if that fails, create a new Sensor.void
setDefaultSensorDebounceGoingActive(long time)
void
setDefaultSensorDebounceGoingInActive(long time)
char
typeLetter()
void
updateAll()
Requests status of all layout sensors under this Sensor Manager.-
Methods inherited from class jmri.managers.AbstractManager
addDataListener, checkNumeric, deleteBean, deregister, dispose, fireDataListenersAdded, fireDataListenersRemoved, fireVetoableChange, getAutoSystemName, getBySystemName, getByUserName, getKnownBeanProperties, getMemo, getNamedBean, getNamedBeanSet, getObjectCount, getOuterBean, getSystemPrefix, handleUserNameUniqueness, makeSystemName, propertyChange, register, registerSelf, 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, deregister, getBeanTypeHandled, getKnownBeanProperties, getMemo, getNamedBean, getNamedBeanSet, getObjectCount, getSubSystemNamePrefix, getSystemNamePrefix, getSystemPrefix, isValidSystemNameFormat, makeSystemName, makeSystemName, makeSystemName, register, removeDataListener, setDataListenerMute, validateBadCharsInSystemNameFormat, validateIntegerSystemNameFormat, validateNmraAccessorySystemNameFormat, validateSystemNameFormat, validateSystemNameFormat, validateSystemNameFormatOnlyNumeric, validateSystemNamePrefix, validateTrimmedMin1NumberSystemNameFormat, validateTrimmedSystemNameFormat, validateUppercaseTrimmedSystemNameFormat, validSystemNameFormat
-
Methods inherited from interface jmri.NameIncrementingManager
allowMultipleAdditions, getNextValidSystemName
-
Methods inherited from interface jmri.beans.PropertyChangeProvider
addPropertyChangeListener, addPropertyChangeListener, getPropertyChangeListeners, getPropertyChangeListeners, removePropertyChangeListener, removePropertyChangeListener
-
Methods inherited from interface jmri.SensorManager
dispose, getByUserName, provide
-
Methods inherited from interface jmri.beans.SilenceablePropertyChangeProvider
setPropertyChangesSilenced
-
Methods inherited from interface jmri.beans.VetoableChangeProvider
addVetoableChangeListener, addVetoableChangeListener, getVetoableChangeListeners, getVetoableChangeListeners, removeVetoableChangeListener, removeVetoableChangeListener
-
-
-
-
Field Detail
-
numberMatcher
static final java.util.regex.Matcher numberMatcher
-
sensorDebounceGoingActive
protected long sensorDebounceGoingActive
-
sensorDebounceGoingInActive
protected long sensorDebounceGoingInActive
-
-
Constructor Detail
-
AbstractSensorManager
public AbstractSensorManager(SystemConnectionMemo memo)
Create a new SensorManager instance.- Parameters:
memo
- the system connection
-
-
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<Sensor>
- Returns:
- write order for this Manager; larger is later.
-
typeLetter
public char typeLetter()
- Specified by:
typeLetter
in interfaceManager<Sensor>
- Returns:
- The type letter for a specific implementation
-
provideSensor
@Nonnull public Sensor provideSensor(@Nonnull java.lang.String name)
Get the Sensor with the user name, then system name if needed; if that fails, create a new Sensor. If the name is a valid system name, it will be used for the new Sensor. Otherwise, theManager.makeSystemName(java.lang.String)
method will attempt to turn it into a valid system name.This provides the same function as
ProvidingManager.provide(java.lang.String)
which has a more generic form.- Specified by:
provideSensor
in interfaceSensorManager
- Parameters:
name
- User name, system name, or address which can be promoted to system name- Returns:
- Never null
-
getSensor
public Sensor getSensor(@Nonnull java.lang.String name)
Get an existing Sensor or return null if it doesn't exist. Locates via user name, then system name if needed.- Specified by:
getSensor
in interfaceSensorManager
- Parameters:
name
- User name or system name to match- Returns:
- null if no match found
-
getBySystemName
public Sensor getBySystemName(@Nonnull java.lang.String key)
Locate an existing instance based on a system name. Special handling for numeric argument, which is treated as the suffix of a new system name- Specified by:
getBySystemName
in interfaceManager<Sensor>
- Specified by:
getBySystemName
in interfaceSensorManager
- Overrides:
getBySystemName
in classAbstractManager<Sensor>
- Parameters:
key
- System Name of the required NamedBean- Returns:
- requested NamedBean object or null if none exists
-
newSensor
@Nonnull public Sensor newSensor(@Nonnull java.lang.String systemName, java.lang.String userName) throws java.lang.IllegalArgumentException
Create a New Sensor. Return a Sensor with the specified user or system name. Return Sensor by UserName else provide by SystemName.Note that two calls with the same arguments will get the same instance; there is only one Sensor object representing a given physical turnout 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 Sensor object created; a valid system name must be provided
- If both names are provided, the system name defines the hardware access of the desired sensor, and the user address is associated with it. The system name must be valid.
- Specified by:
newSensor
in interfaceSensorManager
- Parameters:
systemName
- the desired system nameuserName
- the desired user name- Returns:
- requested Sensor object
- Throws:
java.lang.IllegalArgumentException
- if cannot create the Sensor due to e.g. an illegal name or name that can't be parsed.
-
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<Sensor>
- 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<Sensor> 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<Sensor>
- Returns:
- the class supported by this Manager.
-
createNewSensor
@Nonnull protected abstract Sensor createNewSensor(@Nonnull java.lang.String systemName, java.lang.String userName) throws java.lang.IllegalArgumentException
Internal method to invoke the factory and create a new Sensor. Called after all the logic for returning an existing Sensor has been invoked. An existing SystemName is not found, existing UserName not found. Implementing classes should base Sensor on the system name, then add user name.- Parameters:
systemName
- the system name to use for the new SensoruserName
- the optional user name to use for the new Sensor- Returns:
- the new Sensor
- Throws:
java.lang.IllegalArgumentException
- if unsuccessful with reason for fail.
-
updateAll
public void updateAll()
Requests status of all layout sensors under this Sensor Manager.This method may be invoked whenever the status of sensors needs to be updated from the layout, for example, when an XML configuration file is read in.
This method only needs be implemented in system-specific Sensor Managers where readout of Sensor status from the layout is possible. Delay between requesting individual Sensor status is determined by the Connection Output Interval Setting.
- Specified by:
updateAll
in interfaceSensorManager
-
createSystemName
@Nonnull public java.lang.String createSystemName(@Nonnull java.lang.String curAddress, @Nonnull java.lang.String prefix) throws JmriException
Default Sensor ensures a numeric only system name. Create a System Name from hardware address and system letter prefix. AbstractManager performs no validation.- Specified by:
createSystemName
in interfaceSensorManager
- Overrides:
createSystemName
in classAbstractManager<Sensor>
- Parameters:
curAddress
- hardware address, no system prefix or type letter.prefix
- - just system prefix, not including Type Letter.- Returns:
- full system name with system prefix, type letter and hardware address.
- Throws:
JmriException
- if unable to create a system name.
-
getDefaultSensorDebounceGoingActive
public long getDefaultSensorDebounceGoingActive()
- Specified by:
getDefaultSensorDebounceGoingActive
in interfaceSensorManager
-
getDefaultSensorDebounceGoingInActive
public long getDefaultSensorDebounceGoingInActive()
- Specified by:
getDefaultSensorDebounceGoingInActive
in interfaceSensorManager
-
setDefaultSensorDebounceGoingActive
public void setDefaultSensorDebounceGoingActive(long time)
- Specified by:
setDefaultSensorDebounceGoingActive
in interfaceSensorManager
-
setDefaultSensorDebounceGoingInActive
public void setDefaultSensorDebounceGoingInActive(long time)
- Specified by:
setDefaultSensorDebounceGoingInActive
in interfaceSensorManager
-
isPullResistanceConfigurable
public boolean isPullResistanceConfigurable()
Do the sensor objects provided by this manager support configuring an internal pullup or pull down resistor? This default implementation always returns false.- Specified by:
isPullResistanceConfigurable
in interfaceSensorManager
- Returns:
- true if pull up/pull down configuration is supported.
-
getEntryToolTip
public java.lang.String getEntryToolTip()
Provide a manager-specific tooltip for the Add new item beantable pane.- Specified by:
getEntryToolTip
in interfaceManager<Sensor>
- Specified by:
getEntryToolTip
in interfaceSensorManager
- Returns:
- the tool tip or null to disable the tool tip
-
-