001package jmri.jmrix.powerline;
002
003import java.util.Comparator;
004import java.util.ResourceBundle;
005
006import jmri.*;
007import jmri.jmrix.SerialPort;
008import jmri.jmrix.ConfiguringSystemConnectionMemo;
009import jmri.util.NamedBeanComparator;
010
011/**
012 * Lightweight class to denote that a system is active, and provide general
013 * information.
014 * <p>
015 * Objects of specific subtypes are registered in the instance manager to
016 * activate their particular system.
017 *
018 * @author Bob Jacobsen Copyright (C) 2010 copied from NCE into Powerline for
019 * multiple connections by
020 * @author Ken Cameron Copyright (C) 2011
021 */
022public class SerialSystemConnectionMemo extends jmri.jmrix.DefaultSystemConnectionMemo implements ConfiguringSystemConnectionMemo {
023
024    public SerialSystemConnectionMemo() {
025        super("P", "Powerline");
026        InstanceManager.store(this, SerialSystemConnectionMemo.class); // also register as specific type
027
028        // create and register the ComponentFactory
029        InstanceManager.store(componentFactory = new jmri.jmrix.powerline.swing.PowerlineComponentFactory(this),
030                jmri.jmrix.swing.ComponentFactory.class);
031    }
032
033    jmri.jmrix.swing.ComponentFactory componentFactory = null;
034
035    /**
036     * Provides access to the TrafficController for this particular connection.
037     *
038     * @return tc
039     */
040    public SerialTrafficController getTrafficController() {
041        return serialTrafficController;
042    }
043    private SerialTrafficController serialTrafficController;
044
045    public void setTrafficController(SerialTrafficController tc) {
046        serialTrafficController = tc;
047    }
048
049    /**
050     * Provide access to the serial port for this connection
051     * @return SerialPort
052     */
053    public SerialPort getActiveSerialPort() {
054        return serialPort;
055    }
056    private SerialPort serialPort;
057    public void setActiveSerialPort(SerialPort sp) {
058        serialPort = sp;
059    }
060    /**
061     * Provide access to a serialAddress for this particular connection
062     *
063     * @return serialAddress
064     */
065    public SerialAddress getSerialAddress() {
066        return serialAddress;
067    }
068    private SerialAddress serialAddress;
069
070    public void setSerialAddress(SerialAddress sa) {
071        serialAddress = sa;
072    }
073
074    /**
075     * Configure the common managers for Powerline connections. This puts the
076     * common manager config in one place.
077     */
078    @Override
079    public void configureManagers() {
080        // now does nothing here, it's done by the specific class
081        register(); // registers general type
082    }
083
084    // menu support parts
085    // subclasses can override to change menu items
086
087    public static class MenuItem {
088        MenuItem(String name, String load) {
089            this.name = name;
090            this.load = load;
091        }
092        public String name;
093        public String load;
094    }
095    private final MenuItem[] panelItems = new MenuItem[]{
096        new MenuItem("MenuItemCommandMonitor", "jmri.jmrix.powerline.swing.serialmon.SerialMonPane"),
097        new MenuItem("MenuItemSendCommand", "jmri.jmrix.powerline.swing.packetgen.SerialPacketGenPane")
098    };
099
100    public MenuItem[] provideMenuItemList() {
101        return panelItems;
102    }
103
104    public SerialTurnoutManager getTurnoutManager() {
105        return (SerialTurnoutManager)get(TurnoutManager.class);
106    }
107
108    public SerialLightManager getLightManager() {
109        return (SerialLightManager)get(LightManager.class);
110    }
111
112    public SerialSensorManager getSensorManager() {
113        return (SerialSensorManager)get(SensorManager.class);
114    }
115
116    public void setTurnoutManager(SerialTurnoutManager m) {
117        store(m,TurnoutManager.class);
118    }
119
120    public void setLightManager(SerialLightManager m) {
121        store(m,LightManager.class);
122    }
123
124    public void setSensorManager(SerialSensorManager m) {
125        store(m,SensorManager.class);
126    }
127
128    @Override
129    protected ResourceBundle getActionModelResourceBundle() {
130        return ResourceBundle.getBundle("jmri.jmrix.powerline.PowerlineActionListBundle");
131    }
132
133    @Override
134    public <B extends NamedBean> Comparator<B> getNamedBeanComparator(Class<B> type) {
135        return new NamedBeanComparator<>();
136    }
137
138    @Override
139    public void dispose() {
140        serialTrafficController = null;
141        InstanceManager.deregister(this, SerialSystemConnectionMemo.class);
142        super.dispose();
143    }
144
145}