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