001package jmri.jmrix.mqtt; 002 003import java.util.Comparator; 004import java.util.ResourceBundle; 005import javax.annotation.Nonnull; 006 007import jmri.*; 008import jmri.jmrix.ConfiguringSystemConnectionMemo; 009import jmri.jmrix.DefaultSystemConnectionMemo; 010import jmri.util.NamedBeanComparator; 011 012/** 013 * 014 * @author Lionel Jeanson 015 * @author Dean Cording (c) 2023 016 */ 017public class MqttSystemConnectionMemo extends DefaultSystemConnectionMemo implements ConfiguringSystemConnectionMemo { 018 019 private MqttAdapter mqttAdapter; 020 021 public MqttSystemConnectionMemo() { 022 super("M", "MQTT"); 023 InstanceManager.store(MqttSystemConnectionMemo.this, MqttSystemConnectionMemo.class); 024 } 025 026 @Override 027 public void configureManagers() { 028 029 InstanceManager.setTurnoutManager(getTurnoutManager()); 030 InstanceManager.setSensorManager(getSensorManager()); 031 InstanceManager.setLightManager(getLightManager()); 032 InstanceManager.setReporterManager(getReporterManager()); 033 InstanceManager.setThrottleManager(getThrottleManager()); 034 InstanceManager.store(getPowerManager(), PowerManager.class); 035 InstanceManager.store(getConsistManager(), ConsistManager.class); 036 037 // prefix for MqttSignalMasts 038 MqttSignalMast.setSendTopicPrefix(getMqttAdapter().getOptionState("15")); 039 040 register(); 041 } 042 043 @Override 044 protected ResourceBundle getActionModelResourceBundle() { 045 return null; 046 } 047 048 @Override 049 public <B extends NamedBean> Comparator<B> getNamedBeanComparator(Class<B> type) { 050 return new NamedBeanComparator<>(); 051 } 052 053 public MqttTurnoutManager getTurnoutManager() { 054 if (getDisabled()) { 055 return null; 056 } 057 return (MqttTurnoutManager) classObjectMap.computeIfAbsent(TurnoutManager.class,(Class<?> c) -> { 058 MqttTurnoutManager t = new MqttTurnoutManager(this); 059 t.setSendTopicPrefix(getMqttAdapter().getOptionState("10.3")); 060 t.setRcvTopicPrefix(getMqttAdapter().getOptionState("10.5")); 061 return t; 062 }); 063 064 } 065 066 public MqttSensorManager getSensorManager() { 067 if (getDisabled()) { 068 return null; 069 } 070 return (MqttSensorManager) classObjectMap.computeIfAbsent(SensorManager.class,(Class<?> c) -> { 071 MqttSensorManager t = new MqttSensorManager(this); 072 t.setSendTopicPrefix(getMqttAdapter().getOptionState("11.3")); 073 t.setRcvTopicPrefix(getMqttAdapter().getOptionState("11.5")); 074 return t; 075 }); 076 } 077 078 public MqttLightManager getLightManager() { 079 if (getDisabled()) { 080 return null; 081 } 082 return (MqttLightManager) classObjectMap.computeIfAbsent(LightManager.class,(Class<?> c) -> { 083 MqttLightManager t = new MqttLightManager(this); 084 t.setSendTopicPrefix(getMqttAdapter().getOptionState("12.3")); 085 t.setRcvTopicPrefix(getMqttAdapter().getOptionState("12.5")); 086 return t; 087 }); 088 } 089 090 public MqttReporterManager getReporterManager() { 091 if (getDisabled()) { 092 return null; 093 } 094 return (MqttReporterManager) classObjectMap.computeIfAbsent(ReporterManager.class,(Class<?> c) -> { 095 MqttReporterManager t = new MqttReporterManager(this); 096 t.setRcvTopicPrefix(getMqttAdapter().getOptionState("13")); 097 return t; 098 }); 099 } 100 101 public MqttThrottleManager getThrottleManager() { 102 if (getDisabled()) { 103 return null; 104 } 105 return (MqttThrottleManager) classObjectMap.computeIfAbsent(ThrottleManager.class,(Class<?> c) -> { 106 MqttThrottleManager t = new MqttThrottleManager(this); 107 t.setSendThrottleTopic(getMqttAdapter().getOptionState("16.3")); 108 t.setRcvThrottleTopic(getMqttAdapter().getOptionState("16.5")); 109 t.setSendDirectionTopic(getMqttAdapter().getOptionState("17.3")); 110 t.setRcvDirectionTopic(getMqttAdapter().getOptionState("17.5")); 111 t.setSendFunctionTopic(getMqttAdapter().getOptionState("18.3")); 112 t.setRcvFunctionTopic(getMqttAdapter().getOptionState("18.5")); 113 return t; 114 }); 115 } 116 117 public MqttPowerManager getPowerManager() { 118 if (getDisabled()) { 119 return null; 120 } 121 return (MqttPowerManager) classObjectMap.computeIfAbsent(PowerManager.class,(Class<?> c) -> { 122 MqttPowerManager t = new MqttPowerManager(this); 123 t.setSendTopic(getMqttAdapter().getOptionState("20.3")); 124 t.setRcvTopic(getMqttAdapter().getOptionState("20.5")); 125 return t; 126 }); 127 } 128 129 @Override 130 public MqttConsistManager getConsistManager() { 131 if (getDisabled()) { 132 return null; 133 } 134 return (MqttConsistManager) classObjectMap.computeIfAbsent(ConsistManager.class,(Class<?> c) -> { 135 MqttConsistManager t = new MqttConsistManager(this); 136 t.setSendTopic(getMqttAdapter().getOptionState("19.3")); 137 return t; 138 }); 139 } 140 141 public void setPowerManager(@Nonnull PowerManager p) { 142 store(p,PowerManager.class); 143 } 144 145 @Override 146 public void setConsistManager(@Nonnull ConsistManager c) { 147 store(c,ConsistManager.class); 148 } 149 150 void setMqttAdapter(MqttAdapter ma) { 151 mqttAdapter = ma; 152 } 153 154 public MqttAdapter getMqttAdapter() { 155 return mqttAdapter; 156 } 157}