Class AbstractNamedBeanDecorator
- java.lang.Object
-
- jmri.implementation.decorators.AbstractNamedBeanDecorator
-
- All Implemented Interfaces:
java.lang.Comparable<NamedBean>,PropertyChangeProvider,NamedBean
- Direct Known Subclasses:
TimeoutReporter
public abstract class AbstractNamedBeanDecorator extends java.lang.Object implements NamedBean
Abstract base for the NamedBean Decorators.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface jmri.NamedBean
NamedBean.BadNameException, NamedBean.BadSystemNameException, NamedBean.BadUserNameException, NamedBean.DisplayOptions, NamedBean.DuplicateSystemNameException
-
-
Field Summary
Fields Modifier and Type Field Description protected java.util.HashMap<java.beans.PropertyChangeListener,java.lang.String>listenerRefsprotected java.util.HashMap<java.beans.PropertyChangeListener,java.lang.String>register-
Fields inherited from interface jmri.NamedBean
DISPLAY_NAME_FORMAT, INCONSISTENT, PROPERTY_COMMENT, PROPERTY_ENABLED, PROPERTY_KNOWN_STATE, PROPERTY_STATE, PROPERTY_USERNAME, QUOTED_NAME_FORMAT, UNKNOWN
-
-
Constructor Summary
Constructors Modifier Constructor Description protectedAbstractNamedBeanDecorator(NamedBean decorated)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddPropertyChangeListener(java.beans.PropertyChangeListener listener)Add aPropertyChangeListenerto the listener list.voidaddPropertyChangeListener(java.beans.PropertyChangeListener l, java.lang.String beanRef, java.lang.String listenerRef)Request a call-back when a bound property changes.voidaddPropertyChangeListener(java.lang.String propertyName, java.beans.PropertyChangeListener listener)Add aPropertyChangeListenerfor a specific property.voidaddPropertyChangeListener(java.lang.String propertyName, java.beans.PropertyChangeListener l, java.lang.String beanRef, java.lang.String listenerRef)Request a call-back when a bound property changes.intcompareSystemNameSuffix(java.lang.String suffix1, java.lang.String suffix2, NamedBean n)Compare the suffix of this NamedBean's name with the suffix of the argument NamedBean's name for theNamedBean.compareTo(jmri.NamedBean)operation.java.lang.StringdescribeState(int state)Provide human-readable, localized version of state value.voiddispose()Deactivate this object, so that it releases as many resources as possible and no longer effects others.booleanequals(java.lang.Object obj)protected voidfirePropertyChange(java.lang.String p, java.lang.Object old, java.lang.Object n)java.lang.StringgetBeanType()For instances in the code where we are dealing with just a bean and a message needs to be passed to the user or in a log.java.lang.StringgetComment()Get associated comment text.java.lang.StringgetDisplayName()Get user name if it exists, otherwise return System name.java.lang.StringgetDisplayName(NamedBean.DisplayOptions displayOptions)Get the name to display, formatted perNamedBean.DisplayOptions.java.lang.StringgetListenerRef(java.beans.PropertyChangeListener l)Get the textual reference for the specific listenerjava.util.ArrayList<java.lang.String>getListenerRefs()Get a meaningful list of places where the bean is in use.intgetNumPropertyChangeListeners()Get the number of current listeners.java.lang.ObjectgetProperty(java.lang.String key)Retrieve the value associated with a key.java.beans.PropertyChangeListener[]getPropertyChangeListeners()Get allPropertyChangeListeners currently attached to this object.java.beans.PropertyChangeListener[]getPropertyChangeListeners(java.lang.String propertyName)Get allPropertyChangeListeners currently listening to changes to the specified property.java.beans.PropertyChangeListener[]getPropertyChangeListenersByReference(java.lang.String name)Get a list of all the property change listeners that are registered using a specific namejava.util.Set<java.lang.String>getPropertyKeys()Retrieve the complete current set of keys.java.lang.StringgetSystemName()Get a system-specific name.java.lang.StringgetUserName()User's identification for the item.inthashCode()voidremoveProperty(java.lang.String key)Remove the key/value pair against the NamedBean.voidremovePropertyChangeListener(java.beans.PropertyChangeListener listener)Remove the specified listener from this object.voidremovePropertyChangeListener(java.lang.String propertyName, java.beans.PropertyChangeListener listener)Remove the specified listener of the specified property from this object.voidsetComment(java.lang.String comment)Set associated comment text.voidsetProperty(java.lang.String key, java.lang.Object value)Attach a key/value pair to the NamedBean, which can be retrieved later.voidsetUserName(java.lang.String s)Set the user name, normalizing it if needed.java.lang.StringtoString()Display the system-specific name.voidupdateListenerRef(java.beans.PropertyChangeListener l, java.lang.String newName)voidvetoableChange(java.beans.PropertyChangeEvent evt)-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface jmri.NamedBean
compareTo, getRecommendedToolTip, getState, getUsageReport, setState
-
-
-
-
Field Detail
-
register
protected final java.util.HashMap<java.beans.PropertyChangeListener,java.lang.String> register
-
listenerRefs
protected final java.util.HashMap<java.beans.PropertyChangeListener,java.lang.String> listenerRefs
-
-
Constructor Detail
-
AbstractNamedBeanDecorator
protected AbstractNamedBeanDecorator(NamedBean decorated)
-
-
Method Detail
-
getComment
public final java.lang.String getComment()
Get associated comment text.- Specified by:
getCommentin interfaceNamedBean- Returns:
- the comment or null
-
setComment
public final void setComment(java.lang.String comment)
Set associated comment text.Comments can be any valid text.
- Specified by:
setCommentin interfaceNamedBean- Parameters:
comment- the comment or null to remove an existing comment
-
getDisplayName
@CheckReturnValue @Nonnull public final java.lang.String getDisplayName()
Get user name if it exists, otherwise return System name.- Specified by:
getDisplayNamein interfaceNamedBean- Returns:
- the user name or system-specific name
-
getDisplayName
@CheckReturnValue @Nonnull public final java.lang.String getDisplayName(NamedBean.DisplayOptions displayOptions)
Get the name to display, formatted perNamedBean.DisplayOptions.- Specified by:
getDisplayNamein interfaceNamedBean- Parameters:
displayOptions- the DisplayOptions to use- Returns:
- the display name formatted per options
-
addPropertyChangeListener
@OverridingMethodsMustInvokeSuper public void addPropertyChangeListener(@Nonnull java.beans.PropertyChangeListener l, java.lang.String beanRef, java.lang.String listenerRef)
Description copied from interface:NamedBeanRequest a call-back when a bound property changes. Bound properties are the known state, commanded state, user and system names.- Specified by:
addPropertyChangeListenerin interfaceNamedBean- Parameters:
l- The listener. This may change in the future to be a subclass of NamedProprtyChangeListener that carries the name and listenerRef values internallybeanRef- The name (either system or user) that the listener uses for this namedBean, this parameter is used to help determine when which listeners should be moved when the username is moved from one bean to anotherlistenerRef- A textual reference for the listener, that can be presented to the user when a delete is called
-
addPropertyChangeListener
@OverridingMethodsMustInvokeSuper public void addPropertyChangeListener(@Nonnull java.lang.String propertyName, @Nonnull java.beans.PropertyChangeListener l, java.lang.String beanRef, java.lang.String listenerRef)
Description copied from interface:NamedBeanRequest a call-back when a bound property changes. Bound properties are the known state, commanded state, user and system names.- Specified by:
addPropertyChangeListenerin interfaceNamedBean- Parameters:
propertyName- The name of the property to listen tol- The listener. This may change in the future to be a subclass of NamedProprtyChangeListener that carries the name and listenerRef values internallybeanRef- The name (either system or user) that the listener uses for this namedBean, this parameter is used to help determine when which listeners should be moved when the username is moved from one bean to anotherlistenerRef- A textual reference for the listener, that can be presented to the user when a delete is called
-
addPropertyChangeListener
@OverridingMethodsMustInvokeSuper public void addPropertyChangeListener(java.beans.PropertyChangeListener listener)
Description copied from interface:PropertyChangeProviderAdd aPropertyChangeListenerto the listener list.- Specified by:
addPropertyChangeListenerin interfacePropertyChangeProvider- Parameters:
listener- The PropertyChangeListener to be added
-
addPropertyChangeListener
@OverridingMethodsMustInvokeSuper public void addPropertyChangeListener(java.lang.String propertyName, java.beans.PropertyChangeListener listener)
Description copied from interface:PropertyChangeProviderAdd aPropertyChangeListenerfor a specific property.- Specified by:
addPropertyChangeListenerin interfacePropertyChangeProvider- Parameters:
propertyName- The name of the property to listen on.listener- The PropertyChangeListener to be added
-
removePropertyChangeListener
@OverridingMethodsMustInvokeSuper public void removePropertyChangeListener(java.beans.PropertyChangeListener listener)
Description copied from interface:PropertyChangeProviderRemove the specified listener from this object.- Specified by:
removePropertyChangeListenerin interfacePropertyChangeProvider- Parameters:
listener- ThePropertyChangeListenerto remove.
-
removePropertyChangeListener
@OverridingMethodsMustInvokeSuper public void removePropertyChangeListener(java.lang.String propertyName, java.beans.PropertyChangeListener listener)
Description copied from interface:PropertyChangeProviderRemove the specified listener of the specified property from this object.- Specified by:
removePropertyChangeListenerin interfacePropertyChangeProvider- Parameters:
propertyName- The name of the property to stop listening to.listener- ThePropertyChangeListenerto remove.
-
getPropertyChangeListenersByReference
@Nonnull public java.beans.PropertyChangeListener[] getPropertyChangeListenersByReference(@Nonnull java.lang.String name)
Description copied from interface:NamedBeanGet a list of all the property change listeners that are registered using a specific name- Specified by:
getPropertyChangeListenersByReferencein interfaceNamedBean- Parameters:
name- The name (either system or user) that the listener has registered as referencing this namedBean- Returns:
- empty list if none
-
getListenerRefs
public java.util.ArrayList<java.lang.String> getListenerRefs()
Get a meaningful list of places where the bean is in use.- Specified by:
getListenerRefsin interfaceNamedBean- Returns:
- ArrayList of the listeners
-
updateListenerRef
@OverridingMethodsMustInvokeSuper public void updateListenerRef(java.beans.PropertyChangeListener l, java.lang.String newName)
- Specified by:
updateListenerRefin interfaceNamedBean
-
getListenerRef
public java.lang.String getListenerRef(java.beans.PropertyChangeListener l)
Description copied from interface:NamedBeanGet the textual reference for the specific listener- Specified by:
getListenerRefin interfaceNamedBean- Parameters:
l- the listener of interest- Returns:
- the textual reference
-
getNumPropertyChangeListeners
public int getNumPropertyChangeListeners()
Get the number of current listeners.- Specified by:
getNumPropertyChangeListenersin interfaceNamedBean- Returns:
- -1 if the information is not available for some reason.
-
getPropertyChangeListeners
@Nonnull public java.beans.PropertyChangeListener[] getPropertyChangeListeners()
Description copied from interface:PropertyChangeProviderGet allPropertyChangeListeners currently attached to this object.- Specified by:
getPropertyChangeListenersin interfacePropertyChangeProvider- Returns:
- An array of PropertyChangeListeners.
-
getPropertyChangeListeners
@Nonnull public java.beans.PropertyChangeListener[] getPropertyChangeListeners(java.lang.String propertyName)
Description copied from interface:PropertyChangeProviderGet allPropertyChangeListeners currently listening to changes to the specified property.- Specified by:
getPropertyChangeListenersin interfacePropertyChangeProvider- Parameters:
propertyName- the name of the property of interest- Returns:
- an array of PropertyChangeListeners
-
getSystemName
@Nonnull public final java.lang.String getSystemName()
Get a system-specific name. This encodes the hardware addressing information. Any given system name must be unique within the layout.- Specified by:
getSystemNamein interfaceNamedBean- Returns:
- the system-specific name
-
toString
@Nonnull public final java.lang.String toString()
Display the system-specific name.Note that this is a firm contract: toString() in all implementing classes must return the system name followed by optional additional information. Using code can assume that the result of toString() will always be or start with the system name followed by some kind of separator character.
-
getUserName
public final java.lang.String getUserName()
Description copied from interface:NamedBeanUser's identification for the item. Bound parameter so manager(s) can listen to changes. Any given user name must be unique within the layout. Must not match the system name.- Specified by:
getUserNamein interfaceNamedBean- Returns:
- null if not set
-
getBeanType
@Nonnull public java.lang.String getBeanType()
Description copied from interface:NamedBeanFor instances in the code where we are dealing with just a bean and a message needs to be passed to the user or in a log.- Specified by:
getBeanTypein interfaceNamedBean- Returns:
- a string of the bean type, eg Turnout, Sensor etc
-
setUserName
@OverridingMethodsMustInvokeSuper public void setUserName(java.lang.String s) throws NamedBean.BadUserNameException
Description copied from interface:NamedBeanSet the user name, normalizing it if needed.- Specified by:
setUserNamein interfaceNamedBean- Parameters:
s- the new user name- Throws:
NamedBean.BadUserNameException- if the user name can not be normalized
-
firePropertyChange
@OverridingMethodsMustInvokeSuper protected void firePropertyChange(java.lang.String p, java.lang.Object old, java.lang.Object n)
-
dispose
@OverridingMethodsMustInvokeSuper public void dispose()
Description copied from interface:NamedBeanDeactivate this object, so that it releases as many resources as possible and no longer effects others.For example, if this object has listeners, after a call to this method it should no longer notify those listeners. Any native or system-wide resources it maintains should be released, including threads, files, etc.
It is an error to invoke any other methods on this object once dispose() has been called. Note, however, that there is no guarantee about behavior in that case.
Afterwards, references to this object may still exist elsewhere, preventing its garbage collection. But it's formally dead, and shouldn't be keeping any other objects alive. Therefore, this method should null out any references to other objects that this NamedBean contained.
-
describeState
@Nonnull public java.lang.String describeState(int state)
Description copied from interface:NamedBeanProvide human-readable, localized version of state value.This method is intended for use when presenting to a human operator.
- Specified by:
describeStatein interfaceNamedBean- Parameters:
state- the state to describe- Returns:
- the state in localized form
-
setProperty
@OverridingMethodsMustInvokeSuper public void setProperty(@Nonnull java.lang.String key, java.lang.Object value)
Attach a key/value pair to the NamedBean, which can be retrieved later. These are not bound properties as yet, and don't throw events on modification. Key must not be null.The key is constrained to String to make these behave like normal Java Beans.
- Specified by:
setPropertyin interfaceNamedBean- Parameters:
key- the property to setvalue- the value of the property
-
getProperty
@OverridingMethodsMustInvokeSuper public java.lang.Object getProperty(@Nonnull java.lang.String key)
Description copied from interface:NamedBeanRetrieve the value associated with a key. If no value has been set for that key, returns null.- Specified by:
getPropertyin interfaceNamedBean- Parameters:
key- the property to get- Returns:
- The value of the property or null.
-
getPropertyKeys
@OverridingMethodsMustInvokeSuper @Nonnull public java.util.Set<java.lang.String> getPropertyKeys()
Description copied from interface:NamedBeanRetrieve the complete current set of keys.- Specified by:
getPropertyKeysin interfaceNamedBean- Returns:
- empty set if none
-
removeProperty
@OverridingMethodsMustInvokeSuper public void removeProperty(java.lang.String key)
Description copied from interface:NamedBeanRemove the key/value pair against the NamedBean.- Specified by:
removePropertyin interfaceNamedBean- Parameters:
key- the property to remove
-
vetoableChange
public void vetoableChange(java.beans.PropertyChangeEvent evt) throws java.beans.PropertyVetoException
- Specified by:
vetoableChangein interfaceNamedBean- Throws:
java.beans.PropertyVetoException
-
equals
public boolean equals(java.lang.Object obj)
This implementation tests that
NamedBean.getSystemName()is equal for this and obj.- Overrides:
equalsin classjava.lang.Object- Parameters:
obj- the reference object with which to compare.- Returns:
trueif this object is the same as the obj argument;falseotherwise.
-
hashCode
public int hashCode()
- Overrides:
hashCodein classjava.lang.Object
-
compareSystemNameSuffix
@CheckReturnValue public int compareSystemNameSuffix(@Nonnull java.lang.String suffix1, @Nonnull java.lang.String suffix2, @Nonnull NamedBean n)
Compare the suffix of this NamedBean's name with the suffix of the argument NamedBean's name for theNamedBean.compareTo(jmri.NamedBean)operation. This is intended to be a system-specific comparison that understands the various formats, etc.- Specified by:
compareSystemNameSuffixin interfaceNamedBean- Parameters:
suffix1- The suffix for the 1st bean in the comparisonsuffix2- The suffix for the 2nd bean in the comparisonn- The other (second) NamedBean in the comparison- Returns:
- -1,0,+1 for ordering if the names are well-formed; may not provide proper ordering if the names are not well-formed.
-
-