001package jmri.jmrix.mqtt;
002
003import javax.annotation.Nonnull;
004import jmri.Light;
005
006/**
007 * Implement LightManager for MQTT systems
008 * <p>
009 * System names are "prefixnnn", where prefix is the system prefix and nnn is
010 * the light number without padding.
011 *
012 * @author Paul Bender Copyright (C) 2010
013 */
014public class MqttLightManager extends jmri.managers.AbstractLightManager {
015
016    public MqttLightManager(@Nonnull MqttSystemConnectionMemo memo) {
017        super(memo);
018    }
019
020    public void setSendTopicPrefix(@Nonnull String sendTopicPrefix) {
021        this.sendTopicPrefix = sendTopicPrefix;
022    }
023
024    public void setRcvTopicPrefix(@Nonnull String rcvTopicPrefix) {
025        this.rcvTopicPrefix  = rcvTopicPrefix;
026    }
027    
028    @Nonnull
029    public String sendTopicPrefix = "yard/light/";
030    @Nonnull
031    public String rcvTopicPrefix  = "yard/light/";
032
033    /**
034     * {@inheritDoc}
035     */
036    @Override
037    @Nonnull
038    public MqttSystemConnectionMemo getMemo() {
039        return (MqttSystemConnectionMemo) memo;
040    }
041
042    @Override
043    @Nonnull
044    protected Light createNewLight(@Nonnull String systemName, String userName) throws IllegalArgumentException {
045        String suffix = systemName.substring(getSystemNamePrefix().length());
046
047        String sendTopic = java.text.MessageFormat.format(
048            sendTopicPrefix.contains("{0}") ? sendTopicPrefix : (sendTopicPrefix + "{0}"),
049            suffix);
050        String rcvTopic = java.text.MessageFormat.format(
051            rcvTopicPrefix.contains("{0}") ? rcvTopicPrefix : (rcvTopicPrefix + "{0}"),
052            suffix);
053
054        Light t = new MqttLight(getMemo().getMqttAdapter(), systemName, userName, sendTopic, rcvTopic);
055        t.setUserName(userName);
056        return t;
057    }
058
059    @Override
060    public boolean validSystemNameConfig(String systemName) {
061        return true;
062    }
063    
064    /** {@inheritDoc} */
065    @Override
066    public boolean allowMultipleAdditions(String systemName) {
067        return true;
068    }
069
070    /**
071     * {@inheritDoc}
072     */
073    @Override
074    public String getEntryToolTip() {
075        return "A string which will be inserted into \"" + sendTopicPrefix + "\" for transmission";
076    }
077}