Class DefaultTransit

  • All Implemented Interfaces:
    java.lang.Comparable<NamedBean>, PropertyChangeProvider, NamedBean, Transit

    public class DefaultTransit
    extends AbstractNamedBean
    implements Transit
    A Transit is a group of Sections representing a specified path through a layout.

    A Transit may have the following states:

    IDLE
    available for assignment to a train
    ASSIGNED
    linked to a train in an ActiveTrain

    When assigned to a Transit, options may be set for the assigned Section. The Section and its options are kept in a TransitSection object.

    To accommodate passing sidings and other track features, there may be multiple Sections connecting two other Sections in a Transit. If so, one Section is assigned as primary, and the other connecting Sections are assigned as alternates.

    A Section may be in a Transit more than once, for example if a train is to make two or more loops around a layout before going elsewhere.

    A Transit is normally traversed in the forward direction, that is, the direction of increasing Section Numbers. When a Transit traversal is started up, it is always started in the forward direction. However, to accommodate point-to-point (back and forth) route designs, the direction of travel in a Transit may be "reversed". While the Transit direction is "reversed", the direction of travel is the direction of decreasing Section numbers. Whether a Transit is in the "reversed" direction is kept in the ActiveTrain using the Transit.

    • Constructor Detail

      • DefaultTransit

        public DefaultTransit​(java.lang.String systemName,
                              java.lang.String userName)
      • DefaultTransit

        public DefaultTransit​(java.lang.String systemName)
    • Method Detail

      • getMaxSequence

        public int getMaxSequence()
        Get the maximum sequence number used in this Transit.
        Specified by:
        getMaxSequence in interface Transit
        Returns:
        the maximum sequence
      • containsSection

        public boolean containsSection​(Section s)
        Check if a Section is in this Transit.
        Specified by:
        containsSection in interface Transit
        Parameters:
        s - the section to check for
        Returns:
        true if the section is present; false otherwise
      • getSectionListBySeq

        public java.util.ArrayList<SectiongetSectionListBySeq​(int seq)
        Get a List of Sections with a given sequence number.
        Specified by:
        getSectionListBySeq in interface Transit
        Parameters:
        seq - the sequence number
        Returns:
        the list of of matching sections or an empty list if none
      • getSeqListBySection

        public java.util.ArrayList<java.lang.Integer> getSeqListBySection​(Section s)
        Get a List of sequence numbers for a given Section.
        Specified by:
        getSeqListBySection in interface Transit
        Parameters:
        s - the section to match
        Returns:
        the list of matching sequence numbers or an empty list if none
      • containsBlock

        public boolean containsBlock​(Block block)
        Check if a Block is in this Transit.
        Specified by:
        containsBlock in interface Transit
        Parameters:
        block - the block to check for
        Returns:
        true if block is present; false otherwise
      • getBlockCount

        public int getBlockCount​(Block block)
        Get the number of times a Block is in this Transit.
        Specified by:
        getBlockCount in interface Transit
        Parameters:
        block - the block to check for
        Returns:
        the number of times block is present; 0 if block is not present
      • getSectionFromBlockAndSeq

        public Section getSectionFromBlockAndSeq​(Block b,
                                                 int seq)
        Get a Section from one of its Blocks and its sequence number.
        Specified by:
        getSectionFromBlockAndSeq in interface Transit
        Parameters:
        b - the block within the Section
        seq - the sequence number of the Section
        Returns:
        the Section or null if no matching Section is present
      • getInternalBlocksList

        public java.util.ArrayList<BlockgetInternalBlocksList()
        Get a list of all blocks internal to this Transit. Since Sections may be present more than once, blocks may be listed more than once. The sequence numbers of the Section the Block was found in are accumulated in a parallel list, which can be accessed by immediately calling getBlockSeqList().
        Specified by:
        getInternalBlocksList in interface Transit
        Returns:
        the list of all Blocks or an empty list if none are present
      • getEntryBlocksList

        public java.util.ArrayList<BlockgetEntryBlocksList()
        Get a list of all entry Blocks to this Transit. These are Blocks that a Train might enter from and be going in the direction of this Transit. The sequence numbers of the Section the Block will enter are accumulated in a parallel list, which can be accessed by immediately calling getBlockSeqList().
        Specified by:
        getEntryBlocksList in interface Transit
        Returns:
        the list of all blocks or an empty list if none are present
      • getDestinationBlocksList

        public java.util.ArrayList<BlockgetDestinationBlocksList​(Block startBlock,
                                                                   boolean startInTransit)
        Get a list of all destination blocks that can be reached from a specified starting block. The sequence numbers of the Sections destination blocks were found in are accumulated in a parallel list, which can be accessed by immediately calling getDestBlocksSeqList().

        Note: A Train may not terminate in the same Section in which it starts.

        Note: A Train must terminate in a Block within the Transit.

        Specified by:
        getDestinationBlocksList in interface Transit
        Parameters:
        startBlock - the starting Block to find destinations for
        startInTransit - true if startBlock is within this Transit; false otherwise
        Returns:
        a list of destination Blocks or an empty list if none exist
      • canBeResetWhenDone

        public boolean canBeResetWhenDone()
        Check if this Transit is capable of continuous running.

        A Transit is capable of continuous running if, after an Active Train completes the Transit, it can automatically be restarted. To be restartable, the first Section and the last Section must be the same Section, and the first and last Sections must be defined to run in the same direction. If the last Section is an alternate Section, the previous Section is tested. However, if the Active Train does not complete its Transit in the same Section it started in, the restart will not take place.

        Specified by:
        canBeResetWhenDone in interface Transit
        Returns:
        true if continuous running is possible; otherwise false
      • initializeBlockingSensors

        public int initializeBlockingSensors()
        Initialize blocking sensors for Sections in this Transit. This should be done before any Sections are allocated for this Transit. Only Sections that are Section.FREE are initialized, so as not to interfere with running active trains. If any Section does not have blocking sensors, warning messages are logged.
        Specified by:
        initializeBlockingSensors in interface Transit
        Returns:
        0 if no errors, number of errors otherwise.
      • getBeanType

        public java.lang.String getBeanType()
        Description copied from interface: NamedBean
        For instances in the code where we are dealing with just a bean and a message needs to be passed to the user or in a log.
        Specified by:
        getBeanType in interface NamedBean
        Returns:
        a string of the bean type, eg Turnout, Sensor etc