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}