001package jmri.jmrix.dccpp.network.configurexml;
002
003import jmri.jmrix.configurexml.AbstractNetworkConnectionConfigXml;
004import jmri.jmrix.dccpp.network.ConnectionConfig;
005import jmri.jmrix.dccpp.network.DCCppEthernetAdapter;
006import org.jdom2.Element;
007
008/**
009 * Handle XML persistence of layout connections by persisting the DCC-EX Server
010 * (and connections). Note this is named as the XML version of a
011 * ConnectionConfig object, but it's actually persisting the DCC-EX Server.
012 * <p>
013 * This class is invoked from jmrix.JmrixConfigPaneXml on write, as that class
014 * is the one actually registered. Reads are brought here directly via the class
015 * attribute in the XML.
016 *
017 * @author Paul Bender Copyright (C) 2011
018 * @author Mark Underwood Copyright (C) 2015
019 * @author Chad Francis Copyright (C) 2026
020 */
021public class ConnectionConfigXml extends AbstractNetworkConnectionConfigXml {
022
023    public ConnectionConfigXml() {
024        super();
025    }
026
027    @Override
028    protected void getInstance() {
029        if (adapter == null) {
030            adapter = new DCCppEthernetAdapter();
031        }
032    }
033
034    @Override
035    protected void getInstance(Object object) {
036        adapter = ((ConnectionConfig) object).getAdapter();
037    }
038
039    @Override
040    protected void register() {
041        this.register(new ConnectionConfig(adapter));
042    }
043
044    @Override
045    protected void extendElement(Element e) {
046        e.setAttribute("reconnectEnabled",
047                adapter.getAllowConnectionRecovery() ? "true" : "false");
048    }
049
050    @Override
051    protected void unpackElement(Element shared, Element perNode) {
052        if (shared.getAttribute("reconnectEnabled") != null) {
053            boolean enabled = shared.getAttribute("reconnectEnabled").getValue().equals("true");
054            adapter.setAllowConnectionRecovery(enabled);
055            if (enabled) {
056                adapter.setReconnectMaxAttempts(-1);
057            }
058        }
059    }
060
061}