001package jmri.jmrix.openlcb.configurexml;
002
003import org.jdom2.Element;
004
005import jmri.Meter;
006import jmri.MeterManager;
007import jmri.jmrix.openlcb.OlcbMeterManager;
008/**
009 * Provides load and store functionality for configuring
010 * OlcbMeterManagers.
011 * <p>
012 * Uses the store method from the abstract base class, but provides a load
013 * method here.
014 *
015 * @author Bob Jacobsen      Copyright (C) 2006
016 * @author Daniel Bergqvist  Copyright (C) 2020
017 */
018public class OlcbMeterManagerXml extends jmri.managers.configurexml.AbstractMeterManagerXml {
019
020    public OlcbMeterManagerXml() {
021        super();
022    }
023
024    @Override
025    public void setStoreElementClass(Element meters) {
026        meters.setAttribute("class", this.getClass().getName());
027    }
028
029    // store the meter element.
030    // This adds the actual meter subclass as an element
031    @Override
032    protected Element storeMeter(Meter m) {
033        String mName = m.getSystemName();
034        
035        Element elem = new Element("meter");
036        elem.addContent(new Element("systemName").addContent(mName));
037
038        // store the type of the Meter itself
039        elem.setAttribute("class", m.getClass().getName());
040        
041        // store common part
042        storeCommon(m, elem);
043        
044        return elem;
045    }
046
047    @Override
048    protected void loadMeter(String sysName, String userName, Element el, MeterManager mm) {
049        log.debug("get Meter: ({})({})", sysName, (userName == null ? "<null>" : userName));
050        Meter m = mm.getBySystemName(sysName);
051        
052        if (m == null) {
053            // have to create the specific meter object
054            if (el.getAttributeValue("class").contains("Voltage")) {
055                m = OlcbMeterManager.createVoltageMeter(sysName);
056            } else if (el.getAttributeValue("class").contains("Current")) {
057                m = OlcbMeterManager.createCurrentMeter(sysName);                
058            } else {
059                log.error("Unexpected class when restoring OpenLCB meter: {}", 
060                        el.getChild("class").getContent());
061                return;
062            }
063        }
064
065        m.setUserName(userName);
066        // load common parts
067        loadCommon(m, el);
068    }
069
070    private final static org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(OlcbMeterManagerXml.class);
071
072}