001package jmri.jmrit.logixng.actions.configurexml;
002
003import jmri.InstanceManager;
004import jmri.configurexml.JmriConfigureXmlException;
005import jmri.jmrit.logixng.DigitalActionManager;
006import jmri.jmrit.logixng.NamedTable;
007import jmri.jmrit.logixng.TableRowOrColumn;
008import jmri.jmrit.logixng.actions.ActionListenOnBeansTable;
009import jmri.jmrit.logixng.actions.NamedBeanType;
010import jmri.jmrit.logixng.util.configurexml.LogixNG_SelectNamedBeanXml;
011
012import org.jdom2.Attribute;
013import org.jdom2.Element;
014
015/**
016 * Handle XML configuration for ActionListenOnBeansTable objects.
017 *
018 * @author Bob Jacobsen Copyright: Copyright (c) 2004, 2008, 2010
019 * @author Daniel Bergqvist Copyright (C) 2019
020 */
021public class ActionListenOnBeansTableXml extends jmri.managers.configurexml.AbstractNamedBeanManagerConfigXML {
022
023    public ActionListenOnBeansTableXml() {
024    }
025
026    /**
027     * Default implementation for storing the contents of a SE8cSignalHead
028     *
029     * @param o Object to store, of type TripleTurnoutSignalHead
030     * @return Element containing the complete info
031     */
032    @Override
033    public Element store(Object o) {
034        ActionListenOnBeansTable p = (ActionListenOnBeansTable) o;
035
036        Element element = new Element("ActionListenOnBeansTable");
037        element.setAttribute("class", this.getClass().getName());
038        element.addContent(new Element("systemName").addContent(p.getSystemName()));
039
040        storeCommon(p, element);
041
042        var selectNamedBeanXml = new LogixNG_SelectNamedBeanXml<NamedTable>();
043        element.addContent(selectNamedBeanXml.store(p.getSelectNamedBean(), "namedBean"));
044
045        element.addContent(new Element("rowOrColumnName").addContent(p.getRowOrColumnName()));
046        element.addContent(new Element("tableRowOrColumn").addContent(p.getTableRowOrColumn().name()));
047
048        element.setAttribute("includeCellsWithoutHeader",
049                p.getIncludeCellsWithoutHeader() ? "yes" : "no");  // NOI18N
050
051        element.addContent(new Element("namedBeanType").addContent(p.getNamedBeanType().name()));
052
053        element.addContent(new Element("localVariableNamedBean").addContent(p.getLocalVariableNamedBean()));
054        element.addContent(new Element("localVariableEvent").addContent(p.getLocalVariableEvent()));
055        element.addContent(new Element("localVariableNewValue").addContent(p.getLocalVariableNewValue()));
056
057        element.setAttribute("listenOnAllProperties",
058                p.getListenOnAllProperties()? "yes" : "no");  // NOI18N
059
060        return element;
061    }
062
063    @Override
064    public boolean load(Element shared, Element perNode) throws JmriConfigureXmlException {
065
066        String sys = getSystemName(shared);
067        String uname = getUserName(shared);
068        ActionListenOnBeansTable h = new ActionListenOnBeansTable(sys, uname);
069
070        loadCommon(h, shared);
071
072        var selectNamedBeanXml = new LogixNG_SelectNamedBeanXml<NamedTable>();
073        selectNamedBeanXml.load(shared.getChild("namedBean"), h.getSelectNamedBean());
074        selectNamedBeanXml.loadLegacy(shared, h.getSelectNamedBean(), "table", null, null, null, null);
075
076        Element tableRowOrColumnElement = shared.getChild("tableRowOrColumn");
077        TableRowOrColumn tableRowOrColumn =
078                TableRowOrColumn.valueOf(tableRowOrColumnElement.getTextTrim());
079        h.setTableRowOrColumn(tableRowOrColumn);
080
081        Element rowOrColumnName = shared.getChild("rowOrColumnName");
082        if (rowOrColumnName != null) {
083            h.setRowOrColumnName(rowOrColumnName.getTextTrim());
084        }
085
086        String includeCellsWithoutHeader = "no";
087        Attribute attribute = shared.getAttribute("includeCellsWithoutHeader");
088        if (attribute != null) {  // NOI18N
089            includeCellsWithoutHeader = attribute.getValue();  // NOI18N
090        }
091        h.setIncludeCellsWithoutHeader("yes".equals(includeCellsWithoutHeader));
092
093        Element namedBeanTypeElement = shared.getChild("namedBeanType");
094        NamedBeanType namedBeanType =
095                NamedBeanType.valueOf(namedBeanTypeElement.getTextTrim());
096        h.setNamedBeanType(namedBeanType);
097
098        Element variableName = shared.getChild("localVariableNamedBean");
099        if (variableName != null) {
100            h.setLocalVariableNamedBean(variableName.getTextTrim());
101        }
102
103        variableName = shared.getChild("localVariableEvent");
104        if (variableName != null) {
105            h.setLocalVariableEvent(variableName.getTextTrim());
106        }
107
108        variableName = shared.getChild("localVariableNewValue");
109        if (variableName != null) {
110            h.setLocalVariableNewValue(variableName.getTextTrim());
111        }
112
113        String listenOnAllProperties = "no";
114        attribute = shared.getAttribute("listenOnAllProperties");
115        if (attribute != null) {  // NOI18N
116            listenOnAllProperties = attribute.getValue();  // NOI18N
117        }
118        h.setListenOnAllProperties("yes".equals(listenOnAllProperties));
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(ActionListenOnBeansTableXml.class);
125}