Package jmri

Interface ReporterManager

All Superinterfaces:
Manager<Reporter>, PropertyChangeProvider, ProvidingManager<Reporter>, SilenceablePropertyChangeProvider, VetoableChangeProvider
All Known Implementing Classes:
AbstractReporterManager, CbusReporterManager, ConcentratorReporterManager, Dcc4PcReporterManager, EcosReporterManager, InternalReporterManager, JMRIClientReporterManager, LnReporterManager, ProxyReporterManager, RfidReporterManager, RpsReporterManager, StandaloneReporterManager, Z21ReporterManager

public interface ReporterManager
extends ProvidingManager<Reporter>
Locate a Reporter object representing some specific device on the layout.

Reporter objects are obtained from a ReporterManager, which in turn is generally located from the InstanceManager. A typical call sequence might be:

 Reporter device = InstanceManager.getDefault(jmri.ReporterManager.class).newReporter("23",null);
 

Each Reporter has a two names. The "user" name is entirely free form, and can be used for any purpose. The "system" name is provided by the system-specific implementations, and provides a unique mapping to the layout control system (for example LocoNet or NCE) and address within that system.

Much of the book-keeping is implemented in the AbstractReporterManager class, which can form the basis for a system-specific implementation.


This file is part of JMRI.

JMRI is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. See the "COPYING" file for a copy of this license.

JMRI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

See Also:
Reporter, InstanceManager
  • Method Details

    • 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.

      Parameters:
      name - User name, system name, or address which can be promoted to system name
      Returns:
      Never null
      Throws:
      IllegalArgumentException - if Reporter doesn't already exist and the manager cannot create the Reporter due to an illegal name or name that can't be parsed.
    • provide

      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 interface ProvidingManager<Reporter>
      Parameters:
      name - User name, system name, or address which can be promoted to system name
      Returns:
      Never null
      Throws:
      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.
    • getReporter

      Locate via user name, then system name if needed. If that fails, return null
      Parameters:
      name - User name or system name to match
      Returns:
      null if no match found
    • getBySystemName

      Locate an instance based on a system name. Returns null if no instance already exists.
      Specified by:
      getBySystemName in interface Manager<Reporter>
      Parameters:
      systemName - the system name to locate
      Returns:
      requested Reporter object or null if none exists
    • getByUserName

      Locate an instance based on a user name. Returns null if no instance already exists.
      Specified by:
      getByUserName in interface Manager<Reporter>
      Parameters:
      userName - the user name to locate
      Returns:
      requested Reporter object or null if none exists
    • getByDisplayName

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

      @Nonnull Reporter newReporter​(@Nonnull String systemName, String userName)
      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.
      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.
    • allowMultipleAdditions

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

      Deprecated.
      since 4.21.3; use #getNextValidAddress(String, String, boolean) instead.
      Determine if the address supplied is valid and free, if not then it shall return the next free valid address up to a maximum of 10 addresses away from the initial address.
      Parameters:
      prefix - system prefix used to make up the systemName
      curAddress - hardware address of the turnout to check
      Returns:
      the next available address
      Throws:
      JmriException - if unable to create a system name for the given address, possibly due to invalid address format or no free addresses 10 away.
    • getNextValidAddress

      @Nonnull String getNextValidAddress​(@Nonnull String curAddress, @Nonnull String prefix, boolean ignoreInitialExisting) throws JmriException
      Get the Next valid Reporter address.

      Parameters:
      curAddress - the starting hardware address to get the next valid from.
      prefix - system prefix, just system name, not type letter.
      ignoreInitialExisting - false to return the starting address if it does not exist, else true to force an increment.
      Returns:
      the next valid system name not already in use, excluding both system name prefix and type letter.
      Throws:
      JmriException - if unable to get the current / next address, or more than 10 next addresses in use.
    • createSystemName

      Get a system name for a given hardware address and system prefix.
      Parameters:
      curAddress - desired hardware address
      prefix - system prefix used in system name, excluding Bean type-letter..
      Returns:
      the complete Reporter system name for the prefix and current address
      Throws:
      JmriException - if unable to create a system name for the given address, possibly due to invalid address format
    • getEntryToolTip

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