001package jmri.jmrit.logixng.actions.configurexml; 002 003import jmri.*; 004import jmri.configurexml.JmriConfigureXmlException; 005import jmri.jmrit.logix.Warrant; 006import jmri.jmrit.logix.WarrantManager; 007import jmri.jmrit.logixng.DigitalActionManager; 008import jmri.jmrit.logixng.NamedBeanAddressing; 009import jmri.jmrit.logixng.actions.ActionTurnout; 010import jmri.jmrit.logixng.actions.ActionWarrant; 011import jmri.jmrit.logixng.util.configurexml.LogixNG_SelectEnumXml; 012import jmri.jmrit.logixng.util.configurexml.LogixNG_SelectNamedBeanXml; 013import jmri.jmrit.logixng.util.parser.ParserException; 014 015import org.jdom2.Element; 016 017/** 018 * Handle XML configuration for Warrant objects. 019 * 020 * @author Bob Jacobsen Copyright: Copyright (c) 2004, 2008, 2010 021 * @author Daniel Bergqvist Copyright 2021 022 * @author Dave Sand Copyright (C) 2021 023 * @author Pete Cressman Copyright (C) 2022 024 */ 025public class ActionWarrantXml extends jmri.managers.configurexml.AbstractNamedBeanManagerConfigXML { 026 027 public ActionWarrantXml() { 028 } 029 030 /** 031 * Default implementation for storing the contents of a Warrant 032 * 033 * @param o Object to store, of type TriggerWarrant 034 * @return Element containing the complete info 035 */ 036 @Override 037 public Element store(Object o) { 038 ActionWarrant p = (ActionWarrant) o; 039 040 Element element = new Element("ActionWarrant"); 041 element.setAttribute("class", this.getClass().getName()); 042 element.addContent(new Element("systemName").addContent(p.getSystemName())); 043 044 storeCommon(p, element); 045 046 var selectNamedBeanXml = new LogixNG_SelectNamedBeanXml<Warrant>(); 047 element.addContent(selectNamedBeanXml.store(p.getSelectNamedBean(), "namedBean")); 048 049 var selectMemoryNamedBeanXml = new LogixNG_SelectNamedBeanXml<Memory>(); 050 element.addContent(selectMemoryNamedBeanXml.store(p.getSelectMemoryNamedBean(), "memoryNamedBean")); 051 052 var selectEnumXml = new LogixNG_SelectEnumXml<ActionWarrant.DirectOperation>(); 053 element.addContent(selectEnumXml.store(p.getSelectEnum(), "operation")); 054 055 element.addContent(new Element("dataAddressing").addContent(p.getDataAddressing().name())); 056 element.addContent(new Element("dataReference").addContent(p.getDataReference())); 057 element.addContent(new Element("dataLocalVariable").addContent(p.getDataLocalVariable())); 058 element.addContent(new Element("dataFormula").addContent(p.getDataFormula())); 059 060 element.addContent(new Element("trainIdName").addContent(p.getTrainData())); 061 element.addContent(new Element("controlAutoTrain").addContent(p.getControlAutoTrain().name())); 062 063 return element; 064 } 065 066 @Override 067 public boolean load(Element shared, Element perNode) throws JmriConfigureXmlException { // Test class that inherits this class throws exception 068 String sys = getSystemName(shared); 069 String uname = getUserName(shared); 070 ActionWarrant h = new ActionWarrant(sys, uname); 071 072 loadCommon(h, shared); 073 074 var selectNamedBeanXml = new LogixNG_SelectNamedBeanXml<Warrant>(); 075 var selectEnumXml = new LogixNG_SelectEnumXml<ActionWarrant.DirectOperation>(); 076 077 var selectMemoryNamedBeanXml = new LogixNG_SelectNamedBeanXml<Memory>(); 078 079 selectNamedBeanXml.load(shared.getChild("namedBean"), h.getSelectNamedBean()); 080 selectNamedBeanXml.loadLegacy(shared, h.getSelectNamedBean(), "warrant"); 081 selectMemoryNamedBeanXml.load(shared.getChild("memoryNamedBean"), h.getSelectMemoryNamedBean()); 082 083 selectEnumXml.load(shared.getChild("operation"), h.getSelectEnum()); 084 selectEnumXml.loadLegacy( 085 shared, h.getSelectEnum(), 086 "operationAddressing", 087 "operationDirect", 088 "operationReference", 089 "operationLocalVariable", 090 "operationFormula"); 091 092 try { 093 Element elem = shared.getChild("dataAddressing"); 094 if (elem != null) { 095 h.setDataAddressing(NamedBeanAddressing.valueOf(elem.getTextTrim())); 096 } 097 098 elem = shared.getChild("dataReference"); 099 if (elem != null) h.setDataReference(elem.getTextTrim()); 100 101 elem = shared.getChild("dataLocalVariable"); 102 if (elem != null) h.setDataLocalVariable(elem.getTextTrim()); 103 104 elem = shared.getChild("dataFormula"); 105 if (elem != null) h.setDataFormula(elem.getTextTrim()); 106 107 108 elem = shared.getChild("trainIdName"); 109 if (elem != null) h.setTrainData(elem.getTextTrim()); 110 111 elem = shared.getChild("controlAutoTrain"); 112 if (elem != null) { 113 h.setControlAutoTrain(ActionWarrant.ControlAutoTrain.valueOf(elem.getTextTrim())); 114 } 115 116 } catch (ParserException e) { 117 throw new JmriConfigureXmlException(e); 118 } 119 120 InstanceManager.getDefault(DigitalActionManager.class).registerAction(h); 121 return true; 122 } 123 124// private final static org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(ActionWarrantXml.class); 125}