001package jmri.jmrix;
002
003import javax.annotation.Nonnull;
004import jmri.spi.JmriServiceProviderInterface;
005
006/**
007 * Definition of objects to handle configuring a layout connection.
008 *
009 * Implementing classes <em>must</em> be registered as service providers of this
010 * type to be recognized and usable.
011 * <p>
012 * General design documentation is available on the 
013 * <a href="http://jmri.org/help/en/html/doc/Technical/SystemStructure.shtml">Structure of External System Connections page</a>.
014 *
015 * @author Bob Jacobsen Copyright (C) 2001, 2003
016 * @see JmrixConfigPane
017 * @see ConnectionConfig
018 * @see java.util.ServiceLoader
019 */
020public interface ConnectionTypeList extends JmriServiceProviderInterface {
021
022    /**
023     * Get a list of classes that can configure a layout connection for the
024     * manufacturers specified in {@link #getManufacturers() }.
025     *
026     * @return an Array of classes or an empty Array if none
027     */
028    @Nonnull
029    String[] getAvailableProtocolClasses();
030
031    /**
032     * Get a list of manufacturer names supported by the classes specified in
033     * {@link #getAvailableProtocolClasses() }.
034     *
035     * @return an Array of manufacturers or an empty Array if none
036     */
037    @Nonnull
038    String[] getManufacturers();
039}