Package jmri

Interface LightManager

    • Method Detail

      • provideLight

        @Nonnull
        Light provideLight​(@Nonnull
                           java.lang.String name)
                    throws java.lang.IllegalArgumentException
        Get the Light with the 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 Manager.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.

        Parameters:
        name - User name, system name, or address which can be promoted to system name
        Returns:
        Never null under normal circumstances
        Throws:
        java.lang.IllegalArgumentException
      • provide

        @Nonnull
        default Light provide​(@Nonnull
                              java.lang.String name)
                       throws java.lang.IllegalArgumentException
        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<Light>
        Parameters:
        name - User name, system name, or address which can be promoted to system name
        Returns:
        Never null
        Throws:
        java.lang.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.
      • dispose

        void dispose()
        Free resources when no longer used. Specifically, remove all references to and from this object, so it can be garbage-collected.
        Specified by:
        dispose in interface Manager<Light>
      • getLight

        @CheckReturnValue
        @CheckForNull
        Light getLight​(@Nonnull
                       java.lang.String name)
        Get an existing Light or return null if it doesn't exist.

        Locates via user name, then system name if needed.

        Parameters:
        name - User name, system name, or address which can be promoted to system name
        Returns:
        Light, or null if no existing Light.
      • newLight

        @Nonnull
        Light newLight​(@Nonnull
                       java.lang.String systemName,
                       @CheckForNull
                       java.lang.String userName)
                throws java.lang.IllegalArgumentException
        Return a Light with the specified user or system name. Lookup Light by UserName, then Provide New Light by SystemName. 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; 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 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.
        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.
        Parameters:
        systemName - the desired system name
        userName - the desired user name
        Returns:
        requested Light object (never null)
        Throws:
        java.lang.IllegalArgumentException - if cannot create the Light due to e.g. an illegal name or name that can't be parsed.
      • validSystemNameConfig

        @CheckReturnValue
        default boolean validSystemNameConfig​(@Nonnull
                                              java.lang.String systemName)
        Test if parameter is a valid system name for current configuration.
        Parameters:
        systemName - the system name
        Returns:
        true if valid; false otherwise
      • convertSystemNameToAlternate

        @CheckReturnValue
        @Nonnull
        java.lang.String convertSystemNameToAlternate​(@Nonnull
                                                      java.lang.String systemName)
        Convert the system name to a normalized alternate name.

        This routine is to allow testing to ensure that two Lights with alternate names that refer to the same output bit are not created.

        This routine is implemented in AbstractLightManager to return "". If a system implementation has alternate names, the system specific Light Manager should override this routine and supply the alternate name.

        Parameters:
        systemName - the system name to convert
        Returns:
        an alternate name
      • activateAllLights

        void activateAllLights()
        Activate the control mechanism for each Light controlled by this LightManager. Note that some Lights don't require any activation. The activateLight method in AbstractLight.java determines what needs to be done for each Light.
      • supportsVariableLights

        @CheckReturnValue
        boolean supportsVariableLights​(@Nonnull
                                       java.lang.String systemName)
        Test if system in the given name can support a variable light.
        Parameters:
        systemName - the system name
        Returns:
        true if variable lights are supported; false otherwise
      • createSystemName

        @Nonnull
        java.lang.String createSystemName​(@Nonnull
                                          java.lang.String curAddress,
                                          @Nonnull
                                          java.lang.String prefix)
                                   throws JmriException
        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 Light 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