Package jmri.managers

Class AbstractTurnoutManager

All Implemented Interfaces:
PropertyChangeListener, VetoableChangeListener, EventListener, PropertyChangeFirer, PropertyChangeProvider, SilenceablePropertyChangeProvider, VetoableChangeFirer, VetoableChangeProvider, Manager<Turnout>, NameIncrementingManager, ProvidingManager<Turnout>, TurnoutManager
Direct Known Subclasses:
AcelaTurnoutManager, BiDiBTurnoutManager, CbusTurnoutManager, DCCppTurnoutManager, EasyDccTurnoutManager, EcosTurnoutManager, InternalTurnoutManager, IpocsTurnoutManager, JMRIClientTurnoutManager, LnTurnoutManager, MarklinTurnoutManager, MqttTurnoutManager, MrcTurnoutManager, Mx1TurnoutManager, NceTurnoutManager, OlcbTurnoutManager, RaspberryPiTurnoutManager, SerialTurnoutManager, SerialTurnoutManager, SerialTurnoutManager, SerialTurnoutManager, SerialTurnoutManager, SerialTurnoutManager, SerialTurnoutManager, SprogTurnoutManager, SRCPTurnoutManager, TamsTurnoutManager, XBeeTurnoutManager, XNetTurnoutManager, XpaTurnoutManager

public abstract class AbstractTurnoutManager extends AbstractManager<Turnout> implements TurnoutManager
Abstract partial implementation of a TurnoutManager.
  • Field Details

  • Constructor Details

  • Method Details

    • init

      final void init()
    • 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<Turnout>
      Returns:
      write order for this Manager; larger is later.
    • typeLetter

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

      Get the Turnout with the user name, then system name if needed; if that fails, create a new Turnout. If the name is a valid system name, it will be used for the new Turnout. 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.

      Specified by:
      provideTurnout in interface TurnoutManager
      Parameters:
      name - User name, system name, or address which can be promoted to system name
      Returns:
      Never null
    • getTurnout

      Get an existing Turnout or return null if it doesn't exist. Locates via user name, then system name if needed.
      Specified by:
      getTurnout in interface TurnoutManager
      Parameters:
      name - User name or system name to match
      Returns:
      null if no match found
    • newTurnout

      Return a Turnout with the specified system and user names. Lookup by UserName then provide by System Name.

      Note that two calls with the same arguments will get the same instance; there is only one Turnout object representing a given physical turnout 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 Turnout object created; a valid system name must be provided
      • If both names are provided, the system name defines the hardware access of the desired turnout, 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 Turnouts when you should be looking them up.
      Specified by:
      newTurnout in interface TurnoutManager
      Parameters:
      systemName - the system name
      userName - the user name (optional)
      Returns:
      requested Turnout object, newly created if needed
      Throws:
      IllegalArgumentException - if cannot create the Turnout; likely due to an illegal name or name that cannot be parsed
    • 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<Turnout>
      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<Turnout>
      Returns:
      the class supported by this Manager.
    • getClosedText

      Get text to be used for the Turnout.CLOSED state in user communication. Allows text other than "CLOSED" to be used with certain hardware system to represent the Turnout.CLOSED state.
      Specified by:
      getClosedText in interface TurnoutManager
      Returns:
      the textual representation of Turnout.CLOSED
    • getThrownText

      Get text to be used for the Turnout.THROWN state in user communication. Allows text other than "THROWN" to be use with certain hardware system to represent the Turnout.THROWN state.
      Specified by:
      getThrownText in interface TurnoutManager
      Returns:
      the textual representation of Turnout.THROWN
    • askNumControlBits

      public int askNumControlBits(@Nonnull String systemName)
      Get from the user, the number of addressed bits used to control a turnout. Normally this is 1, and the default routine returns 1 automatically. Turnout Managers for systems that can handle multiple control bits should override this method with one which asks the user to specify the number of control bits. If the user specifies more than one control bit, this method should check if the additional bits are available (not assigned to another object). If the bits are not available, this method should return 0 for number of control bits, after informing the user of the problem.
      Specified by:
      askNumControlBits in interface TurnoutManager
      Parameters:
      systemName - the turnout system name
      Returns:
      the bit length for turnout control
    • isNumControlBitsSupported

      public boolean isNumControlBitsSupported(@Nonnull String systemName)
      Determine if the manager supports multiple control bits, as TurnoutManager.askNumControlBits(java.lang.String) will always return a value even if it is not supported.
      Specified by:
      isNumControlBitsSupported in interface TurnoutManager
      Parameters:
      systemName - the turnout system name
      Returns:
      true if manager supports multiple control bits for the turnout; false otherwise
    • askControlType

      public int askControlType(@Nonnull String systemName)
      Get from the user, the type of output to be used bits to control a turnout. Normally this is 0 for 'steady state' control, and the default routine returns 0 automatically. Turnout Managers for systems that can handle pulsed control as well as steady state control should override this method with one which asks the user to specify the type of control to be used. The routine should return 0 for 'steady state' control, or n for 'pulsed' control, where n specifies the duration of the pulse (normally in seconds).
      Specified by:
      askControlType in interface TurnoutManager
      Parameters:
      systemName - the turnout system name
      Returns:
      0 for steady state or the number of seconds for a pulse control
    • isControlTypeSupported

      public boolean isControlTypeSupported(@Nonnull String systemName)
      Determine if the manager supports the handling of pulsed and steady state control as the TurnoutManager.askControlType(java.lang.String) will always return a value even if it is not supported.
      Specified by:
      isControlTypeSupported in interface TurnoutManager
      Parameters:
      systemName - the turnout system name
      Returns:
      true if manager supports the control type returned by TurnoutManager.askControlType(java.lang.String); false otherwise
    • createNewTurnout

      @Nonnull protected abstract Turnout createNewTurnout(@Nonnull String systemName, String userName) throws IllegalArgumentException
      Internal method to invoke the factory, after all the logic for returning an existing Turnout has been invoked.
      Parameters:
      systemName - the system name to use for the new Turnout
      userName - the user name to use for the new Turnout
      Returns:
      the new Turnout or
      Throws:
      IllegalArgumentException - if unsuccessful
    • getValidOperationTypes

      Get a list of the valid TurnoutOperation subtypes for use with turnouts of this system.
      Specified by:
      getValidOperationTypes in interface TurnoutManager
      Returns:
      a list of subtypes or an empty list if turnout operations are not supported
    • createSystemName

      Default Turnout ensures a numeric only system name. Create a System Name from hardware address and system letter prefix. AbstractManager performs no validation.
      Specified by:
      createSystemName in interface TurnoutManager
      Overrides:
      createSystemName in class AbstractManager<Turnout>
      Parameters:
      curAddress - hardware address, no system prefix or type letter.
      prefix - - just system prefix, not including Type Letter.
      Returns:
      full system name with system prefix, type letter and hardware address.
      Throws:
      JmriException - if unable to create a system name.
    • setDefaultClosedSpeed

      public void setDefaultClosedSpeed(@Nonnull String speed) throws JmriException
      Specified by:
      setDefaultClosedSpeed in interface TurnoutManager
      Throws:
      JmriException
    • setDefaultThrownSpeed

      public void setDefaultThrownSpeed(@Nonnull String speed) throws JmriException
      Specified by:
      setDefaultThrownSpeed in interface TurnoutManager
      Throws:
      JmriException
    • getDefaultThrownSpeed

      Specified by:
      getDefaultThrownSpeed in interface TurnoutManager
    • getDefaultClosedSpeed

      Specified by:
      getDefaultClosedSpeed in interface TurnoutManager
    • getEntryToolTip

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

      public int getOutputInterval()
      Get the Interval (in ms) to wait between output commands. Configured in AdapterConfig, stored in memo.
      Specified by:
      getOutputInterval in interface TurnoutManager
      Returns:
      the (Turnout) Output Interval in milliseconds
    • setOutputInterval

      public void setOutputInterval(int newInterval)
      Set the Interval (in ms) to wait between output commands.
      Specified by:
      setOutputInterval in interface TurnoutManager
      Parameters:
      newInterval - the new Output Interval in Milliseconds
    • outputIntervalEnds

      Get end time of latest OutputInterval, calculated from the current time.
      Specified by:
      outputIntervalEnds in interface TurnoutManager
      Returns:
      end time in milliseconds or current time if no interval was set or timer has completed
    • dispose

      Removes SensorManager and SystemConnectionMemo change listeners. 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<Turnout>
      Overrides:
      dispose in class AbstractManager<Turnout>