001package jmri.jmrit.display.logixng.configurexml; 002 003import jmri.*; 004import jmri.configurexml.JmriConfigureXmlException; 005import jmri.jmrit.logixng.DigitalActionManager; 006import jmri.jmrit.logixng.NamedBeanAddressing; 007import jmri.jmrit.display.logixng.ActionPositionable; 008import jmri.jmrit.logixng.util.parser.ParserException; 009 010import org.jdom2.Element; 011 012/** 013 * Handle XML configuration for ActionPositionable objects. 014 * 015 * @author Bob Jacobsen Copyright: Copyright (c) 2004, 2008, 2010 016 * @author Daniel Bergqvist Copyright (C) 2021 017 */ 018public class ActionPositionableXml extends jmri.managers.configurexml.AbstractNamedBeanManagerConfigXML { 019 020 public ActionPositionableXml() { 021 } 022 023 /** 024 * Default implementation for storing the contents of a ActionPositionable 025 * 026 * @param o Object to store, of type TripleTurnoutSignalHead 027 * @return Element containing the complete info 028 */ 029 @Override 030 public Element store(Object o) { 031 ActionPositionable p = (ActionPositionable) o; 032 033 Element element = new Element("DisplayActionPositionable"); 034 element.setAttribute("class", this.getClass().getName()); 035 element.addContent(new Element("systemName").addContent(p.getSystemName())); 036 037 storeCommon(p, element); 038 039 String editorName = p.getEditorName(); 040 if (editorName != null) { 041 element.addContent(new Element("editorName").addContent(editorName)); 042 } 043 044 String positionableName = p.getPositionableName(); 045 if (positionableName != null) { 046 element.addContent(new Element("positionableName").addContent(positionableName)); 047 } 048 049 element.addContent(new Element("addressing").addContent(p.getAddressing().name())); 050 element.addContent(new Element("reference").addContent(p.getReference())); 051 element.addContent(new Element("localVariable").addContent(p.getLocalVariable())); 052 element.addContent(new Element("formula").addContent(p.getFormula())); 053 054 element.addContent(new Element("stateAddressing").addContent(p.getStateAddressing().name())); 055 element.addContent(new Element("operation").addContent(p.getOperation().name())); 056 element.addContent(new Element("stateReference").addContent(p.getStateReference())); 057 element.addContent(new Element("stateLocalVariable").addContent(p.getStateLocalVariable())); 058 element.addContent(new Element("stateFormula").addContent(p.getStateFormula())); 059 060 return element; 061 } 062 063 @Override 064 public boolean load(Element shared, Element perNode) throws JmriConfigureXmlException { // Test class that inherits this class throws exception 065 String sys = getSystemName(shared); 066 String uname = getUserName(shared); 067 ActionPositionable h = new ActionPositionable(sys, uname); 068 069 loadCommon(h, shared); 070 071 Element elem = shared.getChild("editorName"); 072 if (elem != null) { 073 h.setEditor(elem.getTextTrim()); 074 } 075 076 elem = shared.getChild("positionableName"); 077 if (elem != null) { 078 h.setPositionable(elem.getTextTrim()); 079 } 080 081 try { 082 elem = shared.getChild("addressing"); 083 if (elem != null) { 084 h.setAddressing(NamedBeanAddressing.valueOf(elem.getTextTrim())); 085 } 086 087 elem = shared.getChild("reference"); 088 if (elem != null) h.setReference(elem.getTextTrim()); 089 090 elem = shared.getChild("localVariable"); 091 if (elem != null) h.setLocalVariable(elem.getTextTrim()); 092 093 elem = shared.getChild("formula"); 094 if (elem != null) h.setFormula(elem.getTextTrim()); 095 096 097 elem = shared.getChild("stateAddressing"); 098 if (elem != null) { 099 h.setStateAddressing(NamedBeanAddressing.valueOf(elem.getTextTrim())); 100 } 101 102 Element isControlling = shared.getChild("operation"); 103 if (isControlling != null) { 104 h.setOperation(ActionPositionable.Operation.valueOf(isControlling.getTextTrim())); 105 } 106 107 elem = shared.getChild("stateReference"); 108 if (elem != null) h.setStateReference(elem.getTextTrim()); 109 110 elem = shared.getChild("stateLocalVariable"); 111 if (elem != null) h.setStateLocalVariable(elem.getTextTrim()); 112 113 elem = shared.getChild("stateFormula"); 114 if (elem != null) h.setStateFormula(elem.getTextTrim()); 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(ActionPositionableXml.class); 125}