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}