001package jmri.jmrix.zimo; 002 003import java.util.Comparator; 004import java.util.ResourceBundle; 005 006import jmri.*; 007import jmri.jmrix.ConfiguringSystemConnectionMemo; 008import jmri.jmrix.DefaultSystemConnectionMemo; 009import jmri.managers.DefaultProgrammerManager; 010import jmri.util.NamedBeanComparator; 011 012/** 013 * Lightweight class to denote that a system is active, and provide general 014 * information. 015 * <p> 016 * Objects of specific subtypes are registered in the instance manager to 017 * activate their particular system. 018 * 019 * @author Kevin Dickerson Copyright (C) 2012 020 * @author Bob Jacobsen Copyright (C) 2010 021 * @author Paul Bender Copyright (C) 2020 022 */ 023public class Mx1SystemConnectionMemo extends DefaultSystemConnectionMemo implements ConfiguringSystemConnectionMemo { 024 025 public Mx1SystemConnectionMemo(Mx1TrafficController st) { 026 super("Z", "MX-1"); 027 this.st = st; 028 InstanceManager.store(this, Mx1SystemConnectionMemo.class); 029 // create and register the ComponentFactory 030 InstanceManager.store(componentFactory = new jmri.jmrix.zimo.swing.Mx1ComponentFactory(this), 031 jmri.jmrix.swing.ComponentFactory.class); 032 } 033 034 jmri.jmrix.swing.ComponentFactory componentFactory = null; 035 036 public Mx1SystemConnectionMemo() { 037 super("Z", "MX-1"); 038 InstanceManager.store(this, Mx1SystemConnectionMemo.class); 039 // create and register the ComponentFactory 040 InstanceManager.store(componentFactory = new jmri.jmrix.zimo.swing.Mx1ComponentFactory(this), 041 jmri.jmrix.swing.ComponentFactory.class); 042 } 043 044 public final static int MX1 = 0x00; 045 public final static int MXULF = 0x01; 046 public final static int MX10 = 0x02; 047 public final static int KLUG = 0x03; 048 049 int connectionType = 0x00; 050 051 public void setConnectionType(int connection) { 052 connectionType = connection; 053 } 054 055 public int getConnectionType() { 056 return connectionType; 057 } 058 059 /** 060 * Provide access to the TrafficController for this particular connection. 061 * 062 * @return the associated traffic controller 063 */ 064 public Mx1TrafficController getMx1TrafficController() { 065 return st; 066 } 067 068 /** 069 * TrafficController setter 070 * 071 * Updates the AdapterMemo of the TC to this (but doesn't overwrite) 072 * 073 * @param st TrafficController to use 074 */ 075 public void setMx1TrafficController(Mx1TrafficController st) { 076 this.st = st; 077 078 // Update AdapterMemo in TrafficController to this (don't overwrite existing) 079 if (st.adaptermemo == null) st.adaptermemo = this; 080 } 081 private Mx1TrafficController st; 082 083 @Override 084 public void configureManagers() { 085 086 DefaultProgrammerManager programmerManager = getProgrammerManager(); 087 store(programmerManager,DefaultProgrammerManager.class); 088 if (programmerManager.isAddressedModePossible()) { 089 store(programmerManager, AddressedProgrammerManager.class); 090 InstanceManager.store(programmerManager, AddressedProgrammerManager.class); 091 } 092 if (programmerManager.isGlobalProgrammerAvailable()) { 093 store(programmerManager,GlobalProgrammerManager.class); 094 InstanceManager.store(programmerManager, GlobalProgrammerManager.class); 095 } 096 097 PowerManager powerManager = new Mx1PowerManager(this); 098 store(powerManager, PowerManager.class); 099 jmri.InstanceManager.store(powerManager, PowerManager.class); 100 101 ThrottleManager throttleManager = new jmri.jmrix.zimo.Mx1ThrottleManager(this); 102 store(throttleManager,ThrottleManager.class); 103 InstanceManager.setThrottleManager(throttleManager); 104 if (getProtocol() == Mx1Packetizer.BINARY) { 105 TurnoutManager turnoutManager = new Mx1TurnoutManager(this); 106 store(turnoutManager,TurnoutManager.class); 107 InstanceManager.setTurnoutManager(turnoutManager); 108 } 109 register(); // registers general type 110 } 111 112 boolean getProtocol() { 113 if (getMx1TrafficController() != null) { 114 return getMx1TrafficController().getProtocol(); 115 } 116 return Mx1Packetizer.ASCII; 117 } 118 119 public DefaultProgrammerManager getProgrammerManager() { 120 return (DefaultProgrammerManager) classObjectMap.computeIfAbsent(DefaultProgrammerManager.class, (Class<?> c) -> { 121 return generateDefaultProgrammerManagerForConnection(); 122 }); 123 } 124 125 private DefaultProgrammerManager generateDefaultProgrammerManagerForConnection() { 126 DefaultProgrammerManager programmerManager; 127 if (getProtocol() == Mx1Packetizer.BINARY) { 128 programmerManager = new Mx1ProgrammerManager(new Mx1Programmer(getMx1TrafficController()), this); 129 } else { 130 programmerManager = new DefaultProgrammerManager(new Mx1Programmer(getMx1TrafficController()), this); 131 } 132 return programmerManager; 133 } 134 135 public void setProgrammerManager(DefaultProgrammerManager p) { 136 store(p,DefaultProgrammerManager.class); 137 } 138 139 public Mx1TurnoutManager getTurnoutManager() { 140 return (Mx1TurnoutManager) classObjectMap.get(TurnoutManager.class); 141 } 142 143 public Mx1PowerManager getPowerManager() { 144 return (Mx1PowerManager) classObjectMap.get(PowerManager.class); 145 } 146 147 public Mx1ThrottleManager getThrottleManager() { 148 return (Mx1ThrottleManager) classObjectMap.get(ThrottleManager.class); 149 } 150 151 @Override 152 protected ResourceBundle getActionModelResourceBundle() { 153 return ResourceBundle.getBundle("jmri.jmrix.zimo.ZimoActionListBundle"); 154 } 155 156 @Override 157 public <B extends NamedBean> Comparator<B> getNamedBeanComparator(Class<B> type) { 158 return new NamedBeanComparator<>(); 159 } 160 161 @Override 162 public void dispose() { 163 st = null; 164 InstanceManager.deregister(this, Mx1SystemConnectionMemo.class); 165 if (componentFactory != null) { 166 InstanceManager.deregister(componentFactory, jmri.jmrix.swing.ComponentFactory.class); 167 } 168 Mx1ThrottleManager throttleManager = (Mx1ThrottleManager) classObjectMap.get(ThrottleManager.class); 169 if (throttleManager != null) { 170 deregister(throttleManager,ThrottleManager.class); 171 InstanceManager.deregister(throttleManager, jmri.jmrix.zimo.Mx1ThrottleManager.class); 172 } 173 super.dispose(); 174 } 175 176}