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}