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}