001package jmri.jmrix.mqtt.logixng.configurexml; 002 003import java.util.List; 004 005import jmri.*; 006import jmri.configurexml.JmriConfigureXmlException; 007import jmri.jmrit.logixng.DigitalActionManager; 008import jmri.jmrix.mqtt.MqttSystemConnectionMemo; 009import jmri.jmrix.mqtt.logixng.Publish; 010import jmri.jmrit.logixng.util.configurexml.LogixNG_SelectStringXml; 011 012import org.jdom2.Element; 013 014/** 015 * Handle XML configuration for Publish objects. 016 * 017 * @author Bob Jacobsen Copyright: Copyright (c) 2004, 2008, 2010 018 * @author Daniel Bergqvist Copyright (C) 2022 019 */ 020public class PublishXml extends jmri.managers.configurexml.AbstractNamedBeanManagerConfigXML { 021 022 public PublishXml() { 023 } 024 025 /** 026 * Default implementation for storing the contents of a publish action. 027 * 028 * @param o Object to store, of type Publish 029 * @return Element containing the complete info 030 */ 031 @Override 032 public Element store(Object o) { 033 Publish p = (Publish) o; 034 035 var selectTopicXml = new LogixNG_SelectStringXml(); 036 var selectDataXml = new LogixNG_SelectStringXml(); 037 038 Element element = new Element("MQTTPublish"); 039 element.setAttribute("class", this.getClass().getName()); 040 element.addContent(new Element("systemName").addContent(p.getSystemName())); 041 042 storeCommon(p, element); 043 044 if (p.getMemo() != null) { 045 element.addContent(new Element("systemConnection") 046 .addContent(p.getMemo().getSystemPrefix())); 047 } 048 049 element.addContent(selectTopicXml.store(p.getSelectTopic(), "topic")); 050 element.addContent(selectDataXml.store(p.getSelectMessage(), "message")); 051 052 return element; 053 } 054 055 @Override 056 public boolean load(Element shared, Element perNode) throws JmriConfigureXmlException { 057 String sys = getSystemName(shared); 058 String uname = getUserName(shared); 059 060 MqttSystemConnectionMemo memo = null; 061 062 Element systemConnection = shared.getChild("systemConnection"); 063 if (systemConnection != null) { 064 String systemConnectionName = systemConnection.getTextTrim(); 065 List<MqttSystemConnectionMemo> systemConnections = 066 jmri.InstanceManager.getList(MqttSystemConnectionMemo.class); 067 068 for (MqttSystemConnectionMemo m : systemConnections) { 069 if (m.getSystemPrefix().equals(systemConnectionName)) { 070 memo = m; 071 break; 072 } 073 } 074 } 075 076 Publish h = new Publish(sys, uname, memo); 077 078 var selectTopicXml = new LogixNG_SelectStringXml(); 079 var selectDataXml = new LogixNG_SelectStringXml(); 080 081 loadCommon(h, shared); 082 083 selectTopicXml.load(shared.getChild("topic"), h.getSelectTopic()); 084 selectDataXml.load(shared.getChild("message"), h.getSelectMessage()); 085 086 InstanceManager.getDefault(DigitalActionManager.class).registerAction(h); 087 return true; 088 } 089 090// private final static org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(PublishXml.class); 091}