001package jmri.jmrit.logixng.actions.configurexml; 002 003import java.util.List; 004 005import jmri.InstanceManager; 006import jmri.SystemConnectionMemo; 007import jmri.configurexml.JmriConfigureXmlException; 008import jmri.jmrit.logixng.*; 009import jmri.jmrit.logixng.actions.ProgramOnMain; 010import jmri.jmrit.logixng.util.configurexml.LogixNG_SelectComboBoxXml; 011import jmri.jmrit.logixng.util.configurexml.LogixNG_SelectIntegerXml; 012 013import org.jdom2.Element; 014 015/** 016 * Handle XML configuration for ActionLightXml objects. 017 * 018 * @author Bob Jacobsen Copyright: Copyright (c) 2004, 2008, 2010 019 * @author Daniel Bergqvist Copyright (C) 2024 020 */ 021public class ProgramOnMainXml extends jmri.managers.configurexml.AbstractNamedBeanManagerConfigXML { 022 023 /** 024 * Default implementation for storing the contents of a SE8cSignalHead 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 ProgramOnMain p = (ProgramOnMain) o; 032 033 var selectProgrammingModeXml = new LogixNG_SelectComboBoxXml(); 034 var selectAddressXml = new LogixNG_SelectIntegerXml(); 035 var selectCVXml = new LogixNG_SelectIntegerXml(); 036 var selectValueXml = new LogixNG_SelectIntegerXml(); 037 038 Element element = new Element("ProgramOnMain"); 039 element.setAttribute("class", this.getClass().getName()); 040 element.addContent(new Element("systemName").addContent(p.getSystemName())); 041 042 storeCommon(p, element); 043 044 Element e2 = new Element("Socket"); 045 e2.addContent(new Element("socketName").addContent(p.getExecuteSocket().getName())); 046 MaleSocket socket = p.getExecuteSocket().getConnectedSocket(); 047 String socketSystemName; 048 if (socket != null) { 049 socketSystemName = socket.getSystemName(); 050 } else { 051 socketSystemName = p.getExecuteSocketSystemName(); 052 } 053 if (socketSystemName != null) { 054 e2.addContent(new Element("systemName").addContent(socketSystemName)); 055 } 056 element.addContent(e2); 057 058 element.addContent(selectProgrammingModeXml.store( 059 p.getSelectProgrammingMode(), "programmingMode")); 060 element.addContent(selectAddressXml.store(p.getSelectAddress(), "address")); 061 element.addContent(selectCVXml.store(p.getSelectCV(), "cv")); 062 element.addContent(selectValueXml.store(p.getSelectValue(), "value")); 063 064 if (p.getMemo() != null) { 065 element.addContent(new Element("systemConnection") 066 .addContent(p.getMemo().getSystemPrefix())); 067 } 068 069 element.addContent(new Element("localVariableForStatus").addContent(p.getLocalVariableForStatus())); 070 071 return element; 072 } 073 074 @Override 075 public boolean load(Element shared, Element perNode) throws JmriConfigureXmlException { 076 077 String sys = getSystemName(shared); 078 String uname = getUserName(shared); 079 ProgramOnMain h = new ProgramOnMain(sys, uname); 080 081 var selectProgrammingModeXml = new LogixNG_SelectComboBoxXml(); 082 var selectAddressXml = new LogixNG_SelectIntegerXml(); 083 var selectCVXml = new LogixNG_SelectIntegerXml(); 084 var selectValueXml = new LogixNG_SelectIntegerXml(); 085 086 loadCommon(h, shared); 087 088 Element executeSocket = shared.getChild("Socket"); 089 if ((executeSocket == null) && (shared.getChild("Socket") != null)) { 090 executeSocket = shared.getChild("Socket"); 091 } 092 if (executeSocket != null) { 093 Element socketNameElement = executeSocket.getChild("socketName"); 094 String socketName = socketNameElement.getTextTrim(); 095 Element socketSystemNameElement = executeSocket.getChild("systemName"); 096 String socketSystemName = null; 097 if (socketSystemNameElement != null) { 098 socketSystemName = socketSystemNameElement.getTextTrim(); 099 } 100 101 h.getExecuteSocket().setName(socketName); 102 h.setExecuteSocketSystemName(socketSystemName); 103 } 104 105 selectProgrammingModeXml.load(shared.getChild("programmingMode"), h.getSelectProgrammingMode()); 106 selectAddressXml.load(shared.getChild("address"), h.getSelectAddress()); 107 selectCVXml.load(shared.getChild("cv"), h.getSelectCV()); 108 selectValueXml.load(shared.getChild("value"), h.getSelectValue()); 109 110 Element systemConnection = shared.getChild("systemConnection"); 111 if (systemConnection != null) { 112 String systemConnectionName = systemConnection.getTextTrim(); 113 List<SystemConnectionMemo> systemConnections = 114 jmri.InstanceManager.getList(SystemConnectionMemo.class); 115 116 for (SystemConnectionMemo memo : systemConnections) { 117 if (memo.getSystemPrefix().equals(systemConnectionName)) { 118 h.setMemo(memo); 119 break; 120 } 121 } 122 } 123 124 Element elem = shared.getChild("localVariableForStatus"); // NOI18N 125 h.setLocalVariableForStatus((elem != null) ? elem.getValue() : ""); 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(ProgramOnMainXml.class); 132}