001package jmri.jmrix.can.cbus.logixng.configurexml; 002 003import java.util.List; 004 005import jmri.*; 006import jmri.configurexml.JmriConfigureXmlException; 007import jmri.jmrit.logixng.DigitalActionManager; 008import jmri.jmrit.logixng.util.configurexml.LogixNG_SelectEnumXml; 009import jmri.jmrit.logixng.util.configurexml.LogixNG_SelectIntegerXml; 010import jmri.jmrix.can.CanSystemConnectionMemo; 011import jmri.jmrix.can.cbus.logixng.CategoryMergCbus; 012import jmri.jmrix.can.cbus.logixng.SendMergCbusEvent; 013 014import org.jdom2.Element; 015 016/** 017 * Handle XML configuration for SendCbusEvent objects. 018 * 019 * @author Bob Jacobsen Copyright: Copyright (c) 2004, 2008, 2010 020 * @author Daniel Bergqvist Copyright (C) 2025 021 */ 022public class SendMergCbusEventXml extends jmri.managers.configurexml.AbstractNamedBeanManagerConfigXML { 023 024 public SendMergCbusEventXml() { 025 } 026 027 /** 028 * Default implementation for storing the contents of a clock action. 029 * 030 * @param o Object to store, of type SendCbusEvent 031 * @return Element containing the complete info 032 */ 033 @Override 034 public Element store(Object o) { 035 SendMergCbusEvent p = (SendMergCbusEvent) o; 036 037 var selectEnumXml = new LogixNG_SelectEnumXml<SendMergCbusEvent.CbusEventType>(); 038 var selectIntegerXml = new LogixNG_SelectIntegerXml(); 039 040 Element element = new Element("SendMergCbusEvent"); 041 element.setAttribute("class", this.getClass().getName()); 042 element.addContent(new Element("systemName").addContent(p.getSystemName())); 043 044 storeCommon(p, element); 045 046 if (p.getMemo() != null) { 047 element.addContent(new Element("systemConnection") 048 .addContent(p.getMemo().getSystemPrefix())); 049 } 050 051 element.addContent(selectIntegerXml.store(p.getSelectNodeNumber(), "nodeNumber")); 052 element.addContent(selectIntegerXml.store(p.getSelectEventNumber(), "eventNumber")); 053 element.addContent(selectEnumXml.store(p.getSelectEventType(), "eventType")); 054 055 return element; 056 } 057 058 @Override 059 public boolean load(Element shared, Element perNode) throws JmriConfigureXmlException { 060 String sys = getSystemName(shared); 061 String uname = getUserName(shared); 062 SendMergCbusEvent h = new SendMergCbusEvent(sys, uname, null); 063 064 var selectEnumXml = new LogixNG_SelectEnumXml<SendMergCbusEvent.CbusEventType>(); 065 var selectRateXml = new LogixNG_SelectIntegerXml(); 066 067 loadCommon(h, shared); 068 069 Element systemConnection = shared.getChild("systemConnection"); 070 if (systemConnection != null) { 071 String systemConnectionName = systemConnection.getTextTrim(); 072 List<CanSystemConnectionMemo> systemConnections = CategoryMergCbus.getMergConnections(); 073 074 for (CanSystemConnectionMemo memo : systemConnections) { 075 if (memo.getSystemPrefix().equals(systemConnectionName)) { 076 h.setMemo(memo); 077 break; 078 } 079 } 080 } 081 082 selectRateXml.load(shared.getChild("nodeNumber"), h.getSelectNodeNumber()); 083 selectRateXml.load(shared.getChild("eventNumber"), h.getSelectEventNumber()); 084 selectEnumXml.load(shared.getChild("eventType"), h.getSelectEventType()); 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(SendCbusEventXml.class); 091}