001package jmri.jmrix.ecos;
002
003import java.util.Comparator;
004import java.util.ResourceBundle;
005
006import jmri.*;
007import jmri.managers.DefaultProgrammerManager;
008import jmri.util.NamedBeanComparator;
009
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
019 */
020public class EcosSystemConnectionMemo extends jmri.jmrix.DefaultSystemConnectionMemo {
021
022    public EcosSystemConnectionMemo(EcosTrafficController et) {
023        super("U", "ECoS");
024        this.et = et;
025        et.setAdapterMemo(EcosSystemConnectionMemo.this);
026        init();
027    }
028
029    public EcosSystemConnectionMemo() {
030        super("U", "ECoS");
031        init();
032    }
033
034    private void init() {
035        InstanceManager.store(this, EcosSystemConnectionMemo.class); // also register as specific type
036        InstanceManager.store(cf = new jmri.jmrix.ecos.swing.EcosComponentFactory(this),
037                jmri.jmrix.swing.ComponentFactory.class);
038        store(new EcosPreferences(this), EcosPreferences.class);
039    }
040
041    private jmri.jmrix.swing.ComponentFactory cf = null;
042
043    /**
044     * Provides access to the TrafficController for this particular connection.
045     * @return Ecos traffic controller.
046     */
047    public EcosTrafficController getTrafficController() {
048        return et;
049    }
050
051    public void setEcosTrafficController(EcosTrafficController et) {
052        this.et = et;
053        et.setAdapterMemo(this);
054    }
055    private EcosTrafficController et;
056
057    /**
058     * This puts the common manager config in one place.
059     */
060    public void configureManagers() {
061
062        SensorManager sensorManager = new EcosSensorManager(this);
063        InstanceManager.setSensorManager(sensorManager);
064        store(sensorManager, SensorManager.class);
065
066        PowerManager powerManager = new EcosPowerManager(getTrafficController());
067        InstanceManager.store(powerManager, PowerManager.class);
068        store(powerManager, PowerManager.class);
069
070        TurnoutManager turnoutManager = new EcosTurnoutManager(this);
071        InstanceManager.setTurnoutManager(turnoutManager);
072        store(turnoutManager,TurnoutManager.class);
073
074        EcosLocoAddressManager locoManager = new EcosLocoAddressManager(this);
075        store(locoManager,EcosLocoAddressManager.class);
076
077        ThrottleManager throttleManager = new EcosDccThrottleManager(this);
078        InstanceManager.setThrottleManager(throttleManager);
079        store(throttleManager,ThrottleManager.class);
080
081        ReporterManager reporterManager = new EcosReporterManager(this);
082        InstanceManager.setReporterManager(reporterManager);
083        store(reporterManager,ReporterManager.class);
084
085        InstanceManager.store(getProgrammerManager(), GlobalProgrammerManager.class);
086        store(getProgrammerManager(), GlobalProgrammerManager.class);
087
088        InstanceManager.store(getProgrammerManager(), AddressedProgrammerManager.class);
089        store(getProgrammerManager(), AddressedProgrammerManager.class);
090
091        register(); // registers general type
092    }
093
094    @Override
095    protected ResourceBundle getActionModelResourceBundle() {
096        return ResourceBundle.getBundle("jmri.jmrix.ecos.EcosActionListBundle");
097    }
098
099    @Override
100    public <B extends NamedBean> Comparator<B> getNamedBeanComparator(Class<B> type) {
101        return new NamedBeanComparator<>();
102    }
103
104    public EcosLocoAddressManager getLocoAddressManager() {
105        return get(EcosLocoAddressManager.class);
106    }
107
108    public EcosTurnoutManager getTurnoutManager() {
109        return (EcosTurnoutManager)get(TurnoutManager.class);
110    }
111
112    public EcosSensorManager getSensorManager() {
113        return (EcosSensorManager)get(SensorManager.class);
114    }
115
116    public EcosPreferences getPreferenceManager() {
117        return get(EcosPreferences.class);
118    }
119
120    public EcosDccThrottleManager getThrottleManager() {
121        return (EcosDccThrottleManager)get(ThrottleManager.class);
122    }
123
124    public EcosPowerManager getPowerManager() {
125        return (EcosPowerManager)get(PowerManager.class);
126    }
127
128    public EcosReporterManager getReporterManager() {
129        return (EcosReporterManager)get(ReporterManager.class);
130    }
131
132    public EcosProgrammerManager getProgrammerManager() {
133        return (EcosProgrammerManager) classObjectMap.computeIfAbsent(EcosProgrammerManager.class, (Class<?> c) ->
134            new EcosProgrammerManager(new EcosProgrammer(getTrafficController()), this));
135    }
136
137    @Override
138    public void dispose() {
139        EcosLocoAddressManager locoManager = get(EcosLocoAddressManager.class);
140        if (locoManager != null) {
141            locoManager.dispose();
142            deregister(locoManager, EcosLocoAddressManager.class);
143        }
144        et = null;
145        InstanceManager.deregister(this, EcosSystemConnectionMemo.class);
146        if (cf != null) {
147            InstanceManager.deregister(cf, jmri.jmrix.swing.ComponentFactory.class);
148        }
149        EcosPreferences prefManager = get(EcosPreferences.class);
150        if (prefManager != null) {
151            InstanceManager.getDefault(ShutDownManager.class).deregister(prefManager.ecosPreferencesShutDownTask);
152            deregister(prefManager, EcosPreferences.class);
153        }
154        super.dispose();
155    }
156
157    // private final static Logger log = LoggerFactory.getLogger(EcosSystemConnectionMemo.class);
158
159}