001package jmri.jmrit.logixng.util.configurexml;
002
003import jmri.*;
004import jmri.configurexml.JmriConfigureXmlException;
005import jmri.jmrit.logixng.NamedBeanAddressing;
006import jmri.jmrit.logixng.util.LogixNG_SelectComboBox;
007import jmri.jmrit.logixng.util.LogixNG_SelectComboBox.Item;
008import jmri.jmrit.logixng.util.parser.ParserException;
009
010import org.jdom2.Element;
011
012/**
013 * Xml class for jmri.jmrit.logixng.util.LogixNG_SelectComboBox.
014 *
015 * @author Daniel Bergqvist (C) 2024
016 */
017public class LogixNG_SelectComboBoxXml {
018
019    /**
020     * Default implementation for storing the contents of a LogixNG_SelectComboBox
021     *
022     * @param selectComboBox the LogixNG_SelectTable object
023     * @param tagName the name of the element
024     * @return Element containing the complete info
025     */
026    public Element store(LogixNG_SelectComboBox selectComboBox, String tagName) {
027
028        LogixNG_SelectTableXml selectTableXml = new LogixNG_SelectTableXml();
029
030        Element comboBoxElement = new Element(tagName);
031
032        comboBoxElement.addContent(new Element("addressing").addContent(selectComboBox.getAddressing().name()));
033        Item value = selectComboBox.getValue();
034        if (value != null) {
035            comboBoxElement.addContent(new Element("value").addContent(value.getKey()));
036        }
037        if (selectComboBox.getReference() != null && !selectComboBox.getReference().isEmpty()) {
038            comboBoxElement.addContent(new Element("reference").addContent(selectComboBox.getReference()));
039        }
040        var memory = selectComboBox.getMemory();
041        if (memory != null) {
042            comboBoxElement.addContent(new Element("memory").addContent(memory.getName()));
043        }
044        comboBoxElement.addContent(new Element("listenToMemory").addContent(selectComboBox.getListenToMemory() ? "yes" : "no"));
045        if (selectComboBox.getLocalVariable() != null && !selectComboBox.getLocalVariable().isEmpty()) {
046            comboBoxElement.addContent(new Element("localVariable").addContent(selectComboBox.getLocalVariable()));
047        }
048        if (selectComboBox.getFormula() != null && !selectComboBox.getFormula().isEmpty()) {
049            comboBoxElement.addContent(new Element("formula").addContent(selectComboBox.getFormula()));
050        }
051
052        if (selectComboBox.getAddressing() == NamedBeanAddressing.Table) {
053            comboBoxElement.addContent(selectTableXml.store(selectComboBox.getSelectTable(), "table"));
054        }
055
056        return comboBoxElement;
057    }
058
059    public void load(Element comboBoxElement, LogixNG_SelectComboBox selectComboBox)
060            throws JmriConfigureXmlException {
061
062        if (comboBoxElement != null) {
063
064            LogixNG_SelectTableXml selectTableXml = new LogixNG_SelectTableXml();
065
066            try {
067                Element elem = comboBoxElement.getChild("addressing");
068                if (elem != null) {
069                    selectComboBox.setAddressing(NamedBeanAddressing.valueOf(elem.getTextTrim()));
070                }
071
072                elem = comboBoxElement.getChild("value");
073                if (elem != null) {
074                    selectComboBox.setValue(selectComboBox.getValueByKey(elem.getTextTrim()));
075                }
076
077                elem = comboBoxElement.getChild("reference");
078                if (elem != null) selectComboBox.setReference(elem.getTextTrim());
079
080                Element memoryName = comboBoxElement.getChild("memory");
081                if (memoryName != null) {
082                    Memory m = InstanceManager.getDefault(MemoryManager.class).getMemory(memoryName.getTextTrim());
083                    if (m != null) selectComboBox.setMemory(m);
084                    else selectComboBox.removeMemory();
085                }
086
087                Element listenToMemoryElem = comboBoxElement.getChild("listenToMemory");
088                if (listenToMemoryElem != null) {
089                    selectComboBox.setListenToMemory("yes".equals(listenToMemoryElem.getTextTrim()));
090                }
091
092                elem = comboBoxElement.getChild("localVariable");
093                if (elem != null) selectComboBox.setLocalVariable(elem.getTextTrim());
094
095                elem = comboBoxElement.getChild("formula");
096                if (elem != null) selectComboBox.setFormula(elem.getTextTrim());
097
098                if (comboBoxElement.getChild("table") != null) {
099                    selectTableXml.load(comboBoxElement.getChild("table"), selectComboBox.getSelectTable());
100                }
101
102            } catch (ParserException e) {
103                throw new JmriConfigureXmlException(e);
104            }
105        }
106    }
107
108}