Package jmri.managers

Class ProxyLightManager

All Implemented Interfaces:
PropertyChangeListener, EventListener, PropertyChangeFirer, PropertyChangeProvider, SilenceablePropertyChangeProvider, VetoableChangeFirer, VetoableChangeProvider, LightManager, Manager<Light>, Manager.ManagerDataListener<Light>, ProvidingManager<Light>, ProxyManager<Light>

public class ProxyLightManager
extends AbstractProvidingProxyManager<Light>
implements LightManager
Implementation of a LightManager that can serve as a proxy for multiple system-specific implementations.
  • Constructor Details

  • Method Details

    • getXMLOrder

      public int getXMLOrder()
      Description copied from interface: Manager
      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<Light>
      Returns:
      write order for this Manager; larger is later.
    • makeInternalManager

      Description copied from class: AbstractProxyManager
      Create specific internal manager as needed for concrete type.
      Specified by:
      makeInternalManager in class AbstractProxyManager<Light>
      Returns:
      an internal manager
    • getLight

      public Light getLight​(@Nonnull String name)
      Locate via user name, then system name if needed.
      Specified by:
      getLight in interface LightManager
      Parameters:
      name - User name, system name, or address which can be promoted to system name
      Returns:
      Null if nothing by that name exists
    • makeBean

      protected Light makeBean​(Manager<Light> manager, String systemName, String userName)
      Description copied from class: AbstractProvidingProxyManager
      Defer creation of the proper type to the subclass.
      Specified by:
      makeBean in class AbstractProvidingProxyManager<Light>
      Parameters:
      manager - the manager to invoke
      systemName - the system name
      userName - the user name
      Returns:
      a bean
    • 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 LightManager
      Specified by:
      provide in interface ProvidingManager<Light>
      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.
    • provideLight

      Locate via user name, then system name if needed. If that fails, create a new Light: If the name is a valid system name, it will be used for the new Light. Otherwise, the makeSystemName method will attempt to turn it into a valid system name.
      Specified by:
      provideLight in interface LightManager
      Parameters:
      name - User name, system name, or address which can be promoted to system name
      Returns:
      Never null under normal circumstances
      Throws:
      IllegalArgumentException
    • newLight

      @Nonnull public Light newLight​(@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 Light 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 Light 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.
      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 Lights when you should be looking them up.
      Specified by:
      newLight in interface LightManager
      Parameters:
      systemName - the desired system name
      userName - the desired user name
      Returns:
      requested Light object (never null)
    • validSystemNameConfig

      public boolean validSystemNameConfig​(@Nonnull String systemName)
      Validate system name against the hardware configuration Locate a system specific LightManager based on a system name.
      Specified by:
      validSystemNameConfig in interface LightManager
      Parameters:
      systemName - the system name
      Returns:
      if a manager is found, return its determination of validity of system name format relative to the hardware configuration; false if no manager exists.
    • convertSystemNameToAlternate

      Convert a system name to an alternate format Locate a system specfic LightManager based on a system name. Returns "" if no manager exists. If a manager is found, return its determination of an alternate system name
      Specified by:
      convertSystemNameToAlternate in interface LightManager
      Parameters:
      systemName - the system name to convert
      Returns:
      an alternate name
    • activateAllLights

      public void activateAllLights()
      Activate the control mechanism for each Light controlled by this LightManager. Relay this call to all LightManagers.
      Specified by:
      activateAllLights in interface LightManager
    • supportsVariableLights

      public boolean supportsVariableLights​(@Nonnull String systemName)
      Responds 'true' if Light Manager is for a System that supports variable Lights. Returns false if no manager exists. If a manager is found, return its determination of support for variable lights.
      Specified by:
      supportsVariableLights in interface LightManager
      Parameters:
      systemName - the system name
      Returns:
      true if variable lights are supported; false otherwise
    • allowMultipleAdditions

      public boolean allowMultipleAdditions​(@Nonnull String systemName)
      A method that determines if it is possible to add a range of lights in numerical order eg 11 thru 18, primarily used to show/not show the add range box in the add Light window.
      Specified by:
      allowMultipleAdditions in interface LightManager
      Parameters:
      systemName - the system name
      Returns:
      true if multiple lights can be created at once; false otherwise
    • getNextValidAddress

      public String getNextValidAddress​(@Nonnull String curAddress, @Nonnull String prefix, boolean ignoreInitialExisting) throws JmriException
      Description copied from interface: LightManager
      Get the Next valid hardware address. Used by the Turnout / Sensor / Reporter / Light Manager classes.

      System-specific methods may want to override getIncrement() rather than this one.

      Specified by:
      getNextValidAddress in interface LightManager
      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, 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.
    • getEntryToolTip

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

      @Nonnull public String getBeanTypeHandled​(boolean plural)
      Description copied from interface: Manager
      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<Light>
      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<Light>
      Returns:
      the class supported by this Manager.