Package jmri.managers

Class AbstractReporterManager

All Implemented Interfaces:
PropertyChangeListener, VetoableChangeListener, EventListener, PropertyChangeFirer, PropertyChangeProvider, SilenceablePropertyChangeProvider, VetoableChangeFirer, VetoableChangeProvider, Manager<Reporter>, ProvidingManager<Reporter>, ReporterManager
Direct Known Subclasses:
CbusReporterManager, Dcc4PcReporterManager, EcosReporterManager, InternalReporterManager, JMRIClientReporterManager, LnReporterManager, RfidReporterManager, RpsReporterManager, Z21ReporterManager

public abstract class AbstractReporterManager
extends AbstractManager<Reporter>
implements ReporterManager
Abstract partial implementation of a ReporterManager.
  • Constructor Details

  • Method Details

    • 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 interface Manager<Reporter>
      Returns:
      write order for this Manager; larger is later.
    • typeLetter

      public char typeLetter()
      Specified by:
      typeLetter in interface Manager<Reporter>
      Returns:
      The type letter for a specific implementation
    • provideReporter

      Locate via user name, then system name if needed. If that fails, create a new Reporter. If the name is a valid system name, it will be used for the new Reporter. Otherwise, the makeSystemName 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:
      provideReporter in interface ReporterManager
      Parameters:
      sName - User name, system name, or address which can be promoted to system name
      Returns:
      Never null
    • getReporter

      public Reporter getReporter​(@Nonnull String name)
      Locate via user name, then system name if needed. If that fails, return null
      Specified by:
      getReporter in interface ReporterManager
      Parameters:
      name - User name or system name to match
      Returns:
      null if no match found
    • getBeanTypeHandled

      @Nonnull public 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 interface Manager<Reporter>
      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

      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 interface Manager<Reporter>
      Returns:
      the class supported by this Manager.
    • getByDisplayName

      Locate an instance based on a user name, or if that fails, by system name. Returns null if no instance already exists.
      Specified by:
      getByDisplayName in interface ReporterManager
      Parameters:
      key - the name to locate
      Returns:
      requested Reporter object or null if none exists
    • newReporter

      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 Reporter object representing a given physical Reporter 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 Reporter object created; a valid system name must be provided
      • If both names are provided, the system name defines the hardware access of the desired Reporter, and the user address is associated with it. The system name must be valid.
      Note that it is possible to make an inconsistent request if both addresses are provided, but the given values are associated with different objects. This is a problem, and we don't have a good solution except to issue warnings. This will mostly happen if you're creating Reporters when you should be looking them up.
      Specified by:
      newReporter in interface ReporterManager
      Parameters:
      systemName - the system name
      userName - the user name
      Returns:
      requested Reporter object (never null)
      Throws:
      IllegalArgumentException - if cannot create the Reporter due to an illegal name or name that can't be parsed.
    • createNewReporter

      protected abstract Reporter createNewReporter​(@Nonnull String systemName, String userName)
      Internal method to invoke the factory, after all the logic for returning an existing Reporter has been invoked.
      Parameters:
      systemName - system name.
      userName - username.
      Returns:
      never null
    • allowMultipleAdditions

      public boolean allowMultipleAdditions​(@Nonnull String systemName)
      Determine if it is possible to add a range of reporters in numerical order.
      Specified by:
      allowMultipleAdditions in interface ReporterManager
      Parameters:
      systemName - the system name
      Returns:
      true if multiple reporters can be added
    • getEntryToolTip

      Get a manager-specific tool tip for adding an entry to the manager.
      Specified by:
      getEntryToolTip in interface Manager<Reporter>
      Specified by:
      getEntryToolTip in interface ReporterManager
      Returns:
      the tool tip or null to disable the tool tip