001package jmri.jmrit.logixng.actions.configurexml; 002 003import java.awt.GraphicsEnvironment; 004import java.util.ResourceBundle; 005 006import jmri.*; 007import jmri.configurexml.JmriConfigureXmlException; 008import jmri.jmrit.logixng.DigitalActionManager; 009import jmri.jmrit.logixng.NamedBeanAddressing; 010import jmri.jmrit.logixng.actions.ActionBlock; 011import jmri.jmrit.logixng.util.configurexml.LogixNG_SelectEnumXml; 012import jmri.jmrit.logixng.util.configurexml.LogixNG_SelectNamedBeanXml; 013import jmri.jmrit.logixng.util.parser.ParserException; 014import jmri.util.swing.JmriJOptionPane; 015 016import org.jdom2.Element; 017 018/** 019 * Handle XML configuration for Block objects. 020 * 021 * @author Bob Jacobsen Copyright: Copyright (c) 2004, 2008, 2010 022 * @author Daniel Bergqvist Copyright 2021 023 * @author Dave Sand Copyright (C) 2021 024 */ 025public class ActionBlockXml extends jmri.managers.configurexml.AbstractNamedBeanManagerConfigXML { 026 027 static final ResourceBundle rb = ResourceBundle.getBundle("jmri.jmrit.logixng.actions.ActionBundle"); 028 029 public ActionBlockXml() { 030 } 031 032 /** 033 * Default implementation for storing the contents of a Block 034 * 035 * @param o Object to store, of type TriggerBlock 036 * @return Element containing the complete info 037 */ 038 @Override 039 public Element store(Object o) { 040 ActionBlock p = (ActionBlock) o; 041 042 Element element = new Element("ActionBlock"); 043 element.setAttribute("class", this.getClass().getName()); 044 element.addContent(new Element("systemName").addContent(p.getSystemName())); 045 046 storeCommon(p, element); 047 048 var selectNamedBeanXml = new LogixNG_SelectNamedBeanXml<Block>(); 049 var selectEnumXml = new LogixNG_SelectEnumXml<ActionBlock.DirectOperation>(); 050 051 element.addContent(selectNamedBeanXml.store(p.getSelectNamedBean(), "namedBean")); 052 element.addContent(selectEnumXml.store(p.getSelectEnum(), "operation")); 053 054 element.addContent(new Element("dataAddressing").addContent(p.getDataAddressing().name())); 055 element.addContent(new Element("dataReference").addContent(p.getDataReference())); 056 element.addContent(new Element("dataLocalVariable").addContent(p.getDataLocalVariable())); 057 element.addContent(new Element("dataFormula").addContent(p.getDataFormula())); 058 059 element.addContent(new Element("blockValue").addContent(p.getBlockValue())); 060 061 return element; 062 } 063 064 @Override 065 public boolean load(Element shared, Element perNode) throws JmriConfigureXmlException { // Test class that inherits this class throws exception 066 String sys = getSystemName(shared); 067 String uname = getUserName(shared); 068 ActionBlock h = new ActionBlock(sys, uname); 069 070 loadCommon(h, shared); 071 072 var selectNamedBeanXml = new LogixNG_SelectNamedBeanXml<Block>(); 073 var selectEnumXml = new LogixNG_SelectEnumXml<ActionBlock.DirectOperation>(); 074 075 selectNamedBeanXml.load(shared.getChild("namedBean"), h.getSelectNamedBean()); 076 selectNamedBeanXml.loadLegacy(shared, h.getSelectNamedBean(), "block"); 077 078 selectEnumXml.load(shared.getChild("operation"), h.getSelectEnum()); 079 selectEnumXml.loadLegacy( 080 shared, h.getSelectEnum(), 081 "operationAddressing", 082 "operationDirect", 083 "operationReference", 084 "operationLocalVariable", 085 "operationFormula"); 086 087 try { 088 Element elem = shared.getChild("dataAddressing"); 089 if (elem != null) { 090 h.setDataAddressing(NamedBeanAddressing.valueOf(elem.getTextTrim())); 091 } 092 093 elem = shared.getChild("dataReference"); 094 if (elem != null) h.setDataReference(elem.getTextTrim()); 095 096 elem = shared.getChild("dataLocalVariable"); 097 if (elem != null) h.setDataLocalVariable(elem.getTextTrim()); 098 099 elem = shared.getChild("dataFormula"); 100 if (elem != null) h.setDataFormula(elem.getTextTrim()); 101 102 103 elem = shared.getChild("blockValue"); 104 if (elem != null) h.setBlockValue(elem.getTextTrim()); 105 106 // deprecated 4.23.5 remove 4.25.1 107 elem = shared.getChild("blockConstant"); 108 if (elem != null) h.setBlockValue(elem.getTextTrim()); 109 110 // deprecated 4.23.5 remove 4.25.1 111 elem = shared.getChild("blockMemory"); 112 if (elem != null) { 113 String memoryName = elem.getTextTrim(); 114 h.setBlockValue(">>> " + elem.getTextTrim() + " <<<"); 115 if (!GraphicsEnvironment.isHeadless() && !Boolean.getBoolean("jmri.test.no-dialogs")) { 116 JmriJOptionPane.showMessageDialog(null, 117 rb.getString("ActionBlock_MemoryChange"), 118 rb.getString("ActionBlock_MemoryTitle") + " " + memoryName, 119 JmriJOptionPane.WARNING_MESSAGE); 120 } 121 } 122 123 } catch (ParserException e) { 124 throw new JmriConfigureXmlException(e); 125 } 126 127 InstanceManager.getDefault(DigitalActionManager.class).registerAction(h); 128 return true; 129 } 130 131// private final static org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(ActionBlockXml.class); 132}