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}